一.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
{ -
- 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;
- }