@Constraint注解,做特殊的入参校验
// @Constraint 是 Java 中的注解之一,用于标记自定义的约束注解。约束注解通常用于数据验证,用来限制字段的取值或格式,确保数据的合法性。
@Constraint(validatedBy = FlagValidate.class)
第一步:先建一个@interface Flag的注解校验类,注解相关的校验类为FlagValidate.Class:
import javax.validation.Constraint; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; @Target({ElementType.FIELD, ElementType.PARAMETER}) @Retention(RetentionPolicy.RUNTIME) @Constraint(validatedBy = FlagValidate.class) // @Constraint 是 Java 中的注解之一,用于标记自定义的约束注解。约束注解通常用于数据验证,用来限制字段的取值或格式,确保数据的合法性。 // 新加 @Flag 校验参数注解 public @interface Flag { // 给一个返回的默认值,或者可以自己定义如: @DoneTime(param = "startValue") String message() default "Invalid flag value"; Class<?>[] groups() default {}; Class<?>[] payload() default {}; }
第二步: 具体的校验类,校验方法:
import javax.validation.Constraint; import javax.validation.ConstraintValidator; import javax.validation.ConstraintValidatorContext; /** * 自己写的校验类,需要实现javax.validation包下的类: ConstraintValidator */ public class FlagValidate implements ConstraintValidator<Flag, String> { @Override public boolean isValid(String value, ConstraintValidatorContext constraintValidatorContext) { System.out.println("校验入参的Flag 必须是Y或N: " + value); if (value == null || value.length() == 0) { return true; } return "Y".equals(value) || "N".equals(value); } }
第三步: 使用,在需要检验的字段上加上刚才新建的注解:
@Data @FieldDefaults(level = AccessLevel.PRIVATE) public class BulkTierChangeSaveReqVO { String buId; String programId; String newTierId; @NotEmpty Set<String> visibleCards; @Flag String flag; }
学海无涯 代码作伴