自定义校验器

自定义校验器

  • 描述

描述

以前我们对请求参数入参做校验的时候,一般利用如下依赖,然后在请求入参实体类上增加相关注解即可。但也有时候,一些特殊场景无法处理,如通过文件传递过来的数据,需要对数据记录做校验。这时候常规操作下,可能是直接解析文件后,对记录进行if判断了。为了避免一堆if判断,这时候可以定义一个映射实体类,在实体类上增加校验注解。

`
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-validationartifactId>
        dependency>`
public class ValidateUtil {

    private ValidateUtil() {
    }

    /**
     * 验证器
     */
    private static Validator validator = Validation.buildDefaultValidatorFactory().getValidator();


    /**
     * 校验实体,返回实体所有属性的校验结果
     *
     * @param obj 实体类
     * @param 
     * @return 异常校验结果
     */
    public static <T> VResult validateEntity(T obj) {
        Set<ConstraintViolation<T>> vSet = validator.validate(obj, Default.class);
        return buildResult(vSet);
    }

    /**
     * 校验指定实体类中的属性是否存在异常
     *
     * @param obj     实体类
     * @param proName 属性名
     * @param 
     * @return
     */
    public static <T> VResult validateProperty(T obj, String proName) {
        Set<ConstraintViolation<T>> vSet = validator.validateProperty(obj, proName);
        return buildResult(vSet);
    }

    /**
     * 封装异常结果
     *
     * @param vSet
     * @param 
     * @return
     */
    private static <T> VResult buildResult(Set<ConstraintViolation<T>> vSet) {
        VResult vResult = new VResult();
        if (!CollectionUtils.isEmpty(vSet)) {
            vResult.setHasErrors(true);
            Map<String, String> hashMap = new HashMap<>(8);
            for (ConstraintViolation<T> violation : vSet) {
                hashMap.put(violation.getPropertyPath().toString(), violation.getMessage());
            }
            vResult.setErrMsgMap(hashMap);
        }

        return vResult;
    }

}
public class VResult {

    /**
     * 是否有异常
     * true:有异常
     * false:没有异常
     */
    private boolean hasErrors;

    /**
     * 异常消息记录
     */
    private Map<String, String> errMsgMap;

    public boolean getHasErrors() {
        return hasErrors;
    }

    public void setHasErrors(boolean hasErrors) {
        this.hasErrors = hasErrors;
    }


    public Map<String, String> getErrMsgMap() {
        return errMsgMap;
    }

    public void setErrMsgMap(Map<String, String> errMsgMap) {
        this.errMsgMap = errMsgMap;
    }


    /**
     * 获取异常消息组装
     *
     * @return 异常描述
     */
    public String getErrMsg() {
        if (CollectionUtils.isEmpty(errMsgMap)) {
            return "";
        }

        StringBuilder message = new StringBuilder();
        errMsgMap.forEach((k, v) -> message.append(MessageFormat.format("{0}:{1}", k, v)));
        return message.toString();
    }

    @Override
    public String toString() {
        return "VResult{" +
                "hasErrors=" + hasErrors +
                ", errMsgMap=" + errMsgMap +
                '}';
    }

}

你可能感兴趣的:(java,开发语言)