2013-08-28 67 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; 
}