menu 李昊天的个人博客
SpringBoot validation自定义校验注解
852 浏览 | 2021-04-05 | 分类:JAVA,SpringBoot | 标签:

问题

springBoot2.3之后移除了validation-api,使用的话需要自行添加依赖

       <dependency>
            <groupId>javax.validation</groupId>
            <artifactId>validation-api</artifactId>
            <version>${version}}</version>
        </dependency>

校验类

public class ValueInValidator implements ConstraintValidator<ValueIn, Object> {
    private int min;
    private int max;
    private int[] list;
    private boolean containBoud;
    /**
     *初始化验证器,可以初始化验证注解
     *@param constraintAnnotation 验证注解的实例
     */
    @Override
    public void initialize(ValueIn constraintAnnotation) {
        this.max=constraintAnnotation.max();
        this.min=constraintAnnotation.min();
        this.list=constraintAnnotation.list();
        this.containBoud = containBoud;
    }
    /**
     *实现验证逻辑,判断name长度是否大于min()中定义的长度
     *@param  o 需要验证的对象
     *@param constraintValidatorContext 约束验证器的上下文
     */
    @Override
    public boolean isValid(Object o, ConstraintValidatorContext constraintValidatorContext) {
        Integer integer = Integer.valueOf(o.toString());
        if (this.list.length==0){
            for (int i: list){
                if (integer.equals(i))
                    return true;
            }
        }
        if (containBoud)
           return integer>=min && integer<=max;
        else
            return integer>min && integer<max;

    }

}

注解

只有min和max是我自定义的的也就是可以自行替换的。

@Target({ElementType.FIELD})
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = {ValueInValidator.class})//引入自定义验证规则文件
public @interface ValueIn {

   // 自定义数据
   int min() default  0;
   int max() default  0;
   int []list () default {};
   boolean containBoud() default true;
   
   // 校验未通过时的返回信息
   String message() default "数据范围错误";

   // 以下两行为固定模板
   Class<?>[] groups() default {};
   Class<? extends Payload>[] payload() default {};
   /**
    * Defines several {@link NotNull} annotations on the same element.
    *
    * @see javax.validation.constraints.NotNull
    */
   @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER, TYPE_USE })
   @Retention(RUNTIME)
   @Documented
   @interface List {

      ValueIn[] value();
   }

}
知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议

发表评论

email
web

全部评论 (暂无评论)

info 还没有任何评论,你来说两句呐!