java - 如何在自定义约束 validator 中使用注释元素

标签 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}";

    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();
    }
}

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

* validator 应该是这样的:

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;
    }
    ...

最佳答案

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

关于java - 如何在自定义约束 validator 中使用注释元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29541126/

相关文章:

java - 我想在 Pod 内使用 Fabric8 kubernetes 客户端(java)。如何获取部署集群的 kubernetes 客户端?

java - exe不会使用Process在Java中终止

jquery - asp.net mvc jquery 下拉验证

javascript - jQuery 显示 div 为空输入字段(验证)

Excel VBA : Named range + string value as validation list?

python - 如何让 Sphinx 使用来自 Python stub 文件的类型注释

java - Apache taglib 在 glassfish 中找不到 mysql 驱动程序

java - 如何在java中将字符串设置为日期数据类型

java - "@annotations must be on separate line"的 Checkstyle 规则

Java可重复注释只有一个参数时无法识别