2

我正在尝试创建自己的复合验证注释来验证字符串 - 到目前为止,它由注释 @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;
}
4

2 回答 2

2

您可以使用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;
}
于 2017-10-05T14:35:39.053 回答
0

否,但您的注释可以包含其他注释,例如

@NotNull()
@NotBlank()
@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 {};
    Size size() default @Size(/*enter default size arguments here*/);

}

于 2013-08-28T12:17:12.787 回答