validation校验----可以用来对于请求bean的必填参数进行校验

validation的另一种用法,这种用法更加简单便捷
校验工具类:

package com.alibaba.banff.web.util;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;

    /**
     * 校验工具类
     * 
     * @author lizhilong
     */
    public class ValidationUtils {
    
        private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();
    
        public static <T> ValidationResult validateEntity(T obj) {
            ValidationResult result = new ValidationResult();
            Set<ConstraintViolation<T>> set = validator.validate(obj, Default.class);
            // if( CollectionUtils.isNotEmpty(set) ){
            if (set != null && set.size() != 0) {
                result.setHasErrors(true);
                Map<String, String> errorMsg = new HashMap<String, String>();
                for (ConstraintViolation<T> cv : set) {
                    errorMsg.put(cv.getPropertyPath().toString(), cv.getMessage());
                }
                result.setErrorMsg(errorMsg);
            }
            return result;
        }

    public static <T> ValidationResult validateProperty(T obj, String propertyName) {
        ValidationResult result = new ValidationResult();
        Set<ConstraintViolation<T>> set = validator.validateProperty(obj, propertyName, Default.class);
        if (set != null && set.size() != 0) {
            result.setHasErrors(true);
            Map<String, String> errorMsg = new HashMap<String, String>();
            for (ConstraintViolation<T> cv : set) {
                errorMsg.put(propertyName, cv.getMessage());
            }
            result.setErrorMsg(errorMsg);
        }
        return result;
    }
}

校验工具类返回的数据ValidationResult(省略getset):

package com.aliyun.prophet.facade.partner.flaw;
import java.util.Map;

/**
 * 校验结果
 * 
 * @author lizhilong
 */
public class ValidationResult {

    // 校验结果是否有错
    private boolean             hasErrors;

    // 校验错误信息
    private Map&lt;String, String&gt; errorMsg;
}



Person类(省略getset):

package com.aliyun.prophet.facade.partner.flaw;
import org.hibernate.validator.constraints.Length;
import org.hibernate.validator.constraints.NotEmpty;
import org.hibernate.validator.constraints.Range;

public class Person {
    @Length(max=20,message="姓名长度不能大于20")
    @NotEmpty(message="姓名不能为空")
    private String name;
    @Range(min = 0, max = 1, message = "性别只能输入只能输入0或1")
    private Integer gender;
    private Integer age;
}</span></code></pre>


使用方法:

/**
 * 
 * @author: lizhilong
 */
public class Test {
    @org.junit.Test
    public void testValidation(){
        Person person = new Person();
        person.setAge(12);
        person.setGender(2);
//       person.setName("李智龙");
        ValidationResult result = ValidationUtils.validateEntity(person);
        Map<String, String> map = result.getErrorMsg();
        boolean isError = result.isHasErrors();
        System.out.println("isError: " +isError);
        System.out.println(map);
    }
}
打印结果:

isError: true
{gender=性别只能输入只能输入0或1, name=姓名不能为空}

对于ValidationResult校验结果我们还可以进一步的封装

/**
     *这个方法的作用就是对于ValidationResult  返回结果
     *
     * @param request
     */
    private String validateParam(S request) {
        StringBuilder sbd = new StringBuilder();
        ValidationResult result = ValidationUtil.validateEntity(request);
        if (result.isHasErrors()) {
            result.getErrorMsg().forEach((k, v) -> {
                sbd.append(v).append("&");
            });
        }
        return sbd.deleteCharAt(sbd.length() - 1).toString();
    }

validation结合spring用法,其中包含注解的含义,链接地址:javax.validation结合spring最佳实践

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值