如何在自定义约束验证器中使用注释元素
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();
}
}
我有一个使用注释的验证器 class,基本上,作为我的第一次验证,我想检查该字段是否为空,但前提是该字段的注释指定了 "canBeNull"元素为真 (@CGC(canBeNull="true"))。我的问题是:如何访问验证器中的 canBeNull 元素 class?
*验证器应该是这样的:
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;
}
}
我在名为 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();
}
}
我有一个使用注释的验证器 class,基本上,作为我的第一次验证,我想检查该字段是否为空,但前提是该字段的注释指定了 "canBeNull"元素为真 (@CGC(canBeNull="true"))。我的问题是:如何访问验证器中的 canBeNull 元素 class?
*验证器应该是这样的:
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;
}
}