zoukankan      html  css  js  c++  java
  • 自定义Hibernate Validator约束

    定义注解

    实现一个只能输入指定状态的约束条件

    import javax.validation.Constraint;
    import javax.validation.Payload;
    import java.lang.annotation.Documented;
    import java.lang.annotation.Retention;
    import java.lang.annotation.Target;
    
    import static java.lang.annotation.ElementType.ANNOTATION_TYPE;
    import static java.lang.annotation.ElementType.FIELD;
    import static java.lang.annotation.ElementType.METHOD;
    import static java.lang.annotation.RetentionPolicy.RUNTIME;
    
    @Target( { METHOD, FIELD, ANNOTATION_TYPE })
    @Retention(RUNTIME)
    @Constraint(validatedBy = StatusValidator.class)
    @Documented
    public @interface ValidStatus {
        String message() default "状态错误 ";
        Class<?>[] groups() default {};
        Class<? extends Payload>[] payload() default {};
        /**
         * 有效的状态值集合,默认{1,2}
         */
        int[] value() default {1,2};
    }

    定义校验类

    import javax.validation.ConstraintValidator;
    import javax.validation.ConstraintValidatorContext;
    import java.util.Arrays;
    import java.util.List;
    
    /**
     * 校验状态是否属于指定状态集
     (ConstraintValidator后指定的泛型对象类型为
     注解类和注解注释的字段类型<ValidStatus, Integer>)
     */
    public class StatusValidator implements ConstraintValidator<ValidStatus, Integer> {
        private Integer[] validStatus;
    
        @Override
        public void initialize(ValidStatus validStatus) {
            int[] ints = validStatus.value();
            int n = ints.length;
            Integer[] integers = new Integer[n];
            for (int i = 0; i < n; i++) {
                integers[i] = ints[i];
            }
            this.validStatus = integers;
        }
    
        @Override
        public boolean isValid(Integer n, ConstraintValidatorContext constraintValidatorContext) {
            List<Integer> status = Arrays.asList(validStatus);
            if (status.contains(n)) {
                return true;
            }
            return false;
        }
    }

    程序中使用

    public class QueryDTO {
    @ValidStatus
    @NotNull
    private Integer type;
    //...省略n行代码
    }
    @RestController
    @RequestMapping(value = "xxx")
    public class DemoController {
    //...省略n行代码
    @PostMapping(value = "/testUrl")
        public Response<ResultVO> getXXXList(@RequestBody @Valid QueryDTO dto){
        //...省略n行代码
        }
        
    }

    也可以这样用:

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
            validator = factory.getValidator();
            Set<ConstraintViolation<QueryDTO>> constraintViolations =
                validator.validate(queryDTO);
  • 相关阅读:
    ZooKeeper简介
    Kylin简介
    MVC之Ajax
    mvc扩展HtmlHelper功能
    history.js 一个无刷新就可改变浏览器栏地址的插件(不依赖jquery)
    在ASP.NET MVC中,使用Bundle来打包压缩js和css
    OAuth的MVC实现(微软)
    自定义Exception:MVC抛出自定义异常,并以Json方式返回
    Ubuntu 下常用命令
    科技界、IT届的外号
  • 原文地址:https://www.cnblogs.com/goingforward/p/9300985.html
Copyright © 2011-2022 走看看