簡體   English   中英

如何在自定義約束驗證器中使用注釋元素

[英]How to use an annotation element inside a custom constraint validator

我在我的項目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 =“true) “))。 我的問題是:如何訪問驗證器類中的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;
    }
    ...

您可以在initialize函數中捕獲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;
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM