我正在尝试创建自己的复合验证注释来验证字符串 - 到目前为止,它由注释 @NotNull、@NotBlank 和 @Size 组成
但是,我不想将这些保留为默认值,并且希望能够传入参数值,例如如果我执行@ValidString(min = 1, max = 50),那么@Size注释可以读取这些值 - 这可能吗?
我的限制 -
@NotNull()
@NotBlank()
@Size()
@Constraint(validatedBy = ValidStringValidator.class)
@Target({METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER})
@Retention(RUNTIME)
public @interface ValidString {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
int min() default 1;
int max() default 255;
}
最佳答案
您可以使用OverridesAttribute
@Size(min=1, max=255)
@Retention(RUNTIME)
@Target({ TYPE, FIELD })
@Constraint(validatedBy={})
public @interface ValidString {
String message();
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
@OverridesAttribute(constraint=Size.class, name="min")
int min() default 1;
@OverridesAttribute(constraint=Size.class, name="max")
int max() default 255;
}
关于Java约束注解: Passing Parameter Value To Composite Constraint,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18486317/