SpringBoot 请求参数校验

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

你可能感兴趣的:(spring,boot,后端,java)