SpringBoot validation自定义校验注解
问题
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();
}
}
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 程序员小航
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果