Java 如何在自定义约束验证器中使用注释元素

Java 如何在自定义约束验证器中使用注释元素,java,validation,annotations,Java,Validation,Annotations,我在我的项目中编写了一个名为CGC的自定义注释: @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER }) @Retention(RUNTIME) @Documented @Constraint(validatedBy = CGCValidator.class) public @interface CGC { String message() default "{person.cgc.error}";

我在我的项目中编写了一个名为CGC的自定义注释:

@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
@Documented
@Constraint(validatedBy = CGCValidator.class)
public @interface CGC {
    String message() default "{person.cgc.error}";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    boolean canBeNull() default false;

    @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
    @Retention(RUNTIME)
    @Documented
    public @interface List {
        CGC[] value();
    }
}
@Target({方法、字段、注释\类型、构造函数、参数})
@保留(运行时)
@记录
@约束(validatedBy=CGCValidator.class)
公共@接口CGC{
字符串消息()默认值“{person.cgc.error}”;
类[]组()默认值{};

类您可以在初始化函数中捕获canBeNull值:

class CGCValidator implements ConstraintValidator<CGC, String> {

    boolean canBeNull;

    @Override
    public void initialize(CGC constraintAnnotation) {
        canBeNull = constraintAnnotation.canBeNull();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return canBeNull || value != null;
    }
}
类CGCValidator实现ConstraintValidator{ 布尔canBeNull; @凌驾 公共无效初始化(CGC CONSTRAINTANOTION){ canBeNull=constraintanotation.canBeNull(); } @凌驾 公共布尔值有效(字符串值、ConstraintValidatorContext上下文){ 返回canBeNull | |值!=null; } }
class CGCValidator implements ConstraintValidator<CGC, String> {

    boolean canBeNull;

    @Override
    public void initialize(CGC constraintAnnotation) {
        canBeNull = constraintAnnotation.canBeNull();
    }

    @Override
    public boolean isValid(String value, ConstraintValidatorContext context) {
        return canBeNull || value != null;
    }
}