2013-08-28 161 views
1

我試圖創建自己的複合材料的驗證註解以驗證字符串 - 迄今爲止它是由註釋的@NotNull,@NotBlank和@SizeJava的約束註釋:傳遞參數值綜合約束

但是,我不想讓這些值保持默認值,並希望能夠傳入參數值,例如,如果我使用@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; 
} 
+0

可能重複的[JSR303複合註釋](http://stackoverflow.com/questions/13844161/jsr303-composite-annotation) – Nikordaris

回答

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*/); 

}

1

你可以使用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; 
}