【问题标题】:How to use an annotation element inside a custom constraint validator如何在自定义约束验证器中使用注释元素
【发布时间】:2015-04-09 14:19:14
【问题描述】:

我在我的项目中编写了一个名为 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();
    }
}

我有一个使用注释的验证器类,基本上,作为我的第一个验证,我想检查该字段是否为空,但前提是该字段的注释已将“canBeNull”元素指定为真(@CGC(canBeNull =“真”))。我的问题是:如何访问我的验证器类中的 canBeNull 元素?

*验证器应该是这样的:

public class CGCValidator implements ConstraintValidator<CGC, String> {

    @Override
    public void initialize(CGC annotation) {
    }

    @Override
    public boolean isValid(String cgc, ConstraintValidatorContext constraintValidatorContext) {
    if(!canBeNull() && cgc == null) {
    return false;
    }
    ...

【问题讨论】:

    标签: java validation annotations


    【解决方案1】:

    可以在初始化函数中捕获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;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2019-02-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多