侧边栏壁纸
博主头像
昊天的个人博客 博主等级

行动起来,活在当下

  • 累计撰写 65 篇文章
  • 累计创建 72 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

SpringBoot validation自定义校验注解

昊天
2021-04-05 / 0 评论 / 0 点赞 / 2 阅读 / 0 字

问题

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();
   }

}
0

评论区