@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;
}
复制代码

 

posted @   威兰达  阅读(544)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
历史上的今天:
2019-08-09 锁概念和死锁,锁类型
点击右上角即可分享
微信分享提示