Validator自定义校验

 

一.导入maven依赖

    <dependency> 
      <groupId>javax.validation</groupId>  
      <artifactId>validation-api</artifactId>  
      <version>1.1.0.Final</version> 
    </dependency>  
    <dependency> 
      <groupId>org.hibernate</groupId>  
      <artifactId>hibernate-validator</artifactId>  
      <version>5.2.0.Final</version> 
    </dependency> 

二.给需要校验的pojo加上注解

多层嵌套List校验用@Vaild

    @Length(max = 128, message = "MAC值最大长度不能超过128!")
    private String MAC_VALUE;           //MAC值

    @NotBlank(message = "返回状态不能为空!")
    @Length(max = 1, message = "返回状态最大长度不能超过1!")
    private String RET_STATUS;          //返回状态 S-系统处理成功 F-系统处理失败

    @Valid
    List<Ret> RET_ARRAY;      //返回信息列表

    public class Ret {

        @NotBlank(message = "返回代码不能为空!")
        @Length(max = 30, message = "返回代码最大长度不能超过30!")
        private String RET_CODE;    //返回代码

        @NotBlank(message = "返回信息不能为空!")
        @Length(max = 512, message = "返回信息最大长度不能超过512!")
        private String RET_MSG;     //返回信息

        
    }

三、通用Validator校验工具 

import org.apache.commons.collections.CollectionUtils;

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.groups.Default;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;

/**
 * validator校验工具
 * @author liuy
 * @since 2019年6月20日 19:33:56
 */
public class ValidatorUtil {
    private static Validator validator;

    static {
        validator = Validation.buildDefaultValidatorFactory().getValidator();
    }

    /**
     * 单个校验
     * @param object        待校验对象
     */
    public static String dataCheck(Object object){
        String result = null;
        Set<?> set = validator.validate(object);
        if(set != null && set.size() > 0){
            Iterator<?> it = set.iterator();
            ConstraintViolation<?> cv = (ConstraintViolation<?>) it.next();
            String property = cv.getPropertyPath().iterator().next().getName();
            result = "[" + property + ":" + cv.getMessage() + "]";
        }
        return result;
    }

    /**
     * 使用指定分组校验
     * @param object 被校验的bean
     * @param groups 分组
     * @return
     */
    public static <T> Map<String, StringBuilder> validate(T object, Class<?>... groups) {
        Map<String, StringBuilder> errorMap = new HashMap<>(16);
        if (groups == null) {
            groups = new Class[]{Default.class};
        }
        Set<ConstraintViolation<T>> set = validator.validate(object, groups);
        if (CollectionUtils.isEmpty(set)) {
            return null;
        }
        String property;
        for (ConstraintViolation<T> c : set) {
            // 这里循环获取错误信息,可以自定义格式
            property = c.getPropertyPath().toString();
            if (errorMap.get(property) != null) {
                errorMap.get(property).append(",").append(c.getMessage());
            } else {
                StringBuilder sb = new StringBuilder();
                sb.append(c.getMessage());
                errorMap.put(property, sb);
            }
        }
        return errorMap;
    }
}

 

四、校验工具的使用

//校验响应SysHead
            Map<String, StringBuilder> errorMap1 = ValidatorUtil.validate(esbResponse.getSYS_HEAD());
            if(errorMap1 != null && errorMap1.size() >0) {
                logger.error("响应报文SysHead校验出错!");
                for (Map.Entry<String, StringBuilder> entry : errorMap1.entrySet()) {
                    logger.error("出错字段: {}, 校验信息: {}", entry.getKey(), entry.getValue());
                }
            }

参考:https://www.jianshu.com/p/b3876bf9396c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值