一.SpringBoot 使用validation数据校验之分组校验怎么玩?·分组还有这么多讲究 - 第408篇 - 知乎
二.自定义注解枚举校验
1.aop注解
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Constraint(validateBy = {EnumValueValidator.class})
public @interface EnumValue {
//默认错误消息
String message() default "必须为指定值";
String[] strValues() default {};
int[] intValues() default {};
//分组
Class<?>[] group() default {};
//负载
Class<? extends PayLoad>[] payload() default {};
//指定对多个时使用
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.PARAMETER})
@Retention(RetentionPolicy.RUNTIME)
@Documented
@interface List{
EnumValue[] value();
}
}
2.注解处理类
public class EnumValueValidator implemetns ConstraintValidator<EnumVale, Object>{
private String[] strValue;
private int[] intValues;
@Override
public void initialize(EnumValue constraintAnnotation) {
strValue = constraintAnnotation.strValues();
intValues = constraintAnnotation.intValues();
}
public boolean isValid(Object value, ConstraintValidatorContext context) {
if (value instanceof String) {
for (String s : strValue) {
if (s.equals(value)) {
return true;
}
}
}
else if (value instanceof Integer) {
for (String s : strValue) {
if (s == value) {
return true;
}
}
}
return false;
}
}
3.注解使用
public class request {
@EnumValue(intValues = {1,2,3,4}, message = "必须是指定值", group = {ValidGroup.Add.class})
private Integer modelTypeId;
}