java – JSR 303自定义约束覆盖
|
我想在字段(本例中是字符串)上放置一组标准约束(如非空字母数字字符串,长度为3到240个字符),并想知道是否有一种方法可以覆盖模型代码中的某些约束.这也将是一个重写,或者只是对覆盖的注释进行两次验证?
它应该是这样的 @AlphanumericString @Size(min=100,max=150) //override standart values from AlphanumericString annotation 谢谢你的回答 好的,回答我自己. @OverridesParameter有助于重新分配嵌套的注释参数 @Numerical
@Size //arbitrary parameter values
@ConstraintValidator(FrenchZipcodeValidator.class)
@Documented
@Target({ANNOTATION_TYPE,METHOD,FIELD})
@Retention(RUNTIME)
public @interface FrenchZipCode {
String message() default "Wrong zipcode";
String[] groups() default {};
@OverridesParameters( {
@OverridesParameter(constraint=Size.class,parameter="min")
@OverridesParameter(constraint=Size.class,parameter="max") } )
int size() default 5;
@OverridesParameter(constraint=Size.class,parameter="message")
String sizeMessage() default "{error.zipcode.size}";
@OverridesParameter(constraint=Numerical.class,parameter="message")
String numericalMessage() default "{error.zipcode.numerical}";
}
source 解决方法
这是一个很好的问题.
JSR 303 Bean Validation specification描述了3.5节中的验证例程.
在您的情况下,您将处理目标组为Default的简单String字段的验证.您有两个验证约束(@AlphanumericString和@Size),根据文档,它们将按照特定顺序单独验证/处理. 所以回答你的问题.不,当您使用@Size addaly时,@ AlphanumericString不会应用任何覆盖.为了能够实现我认为您尝试执行的操作,您可以创建一个约束组合,其中您可以从组成注释中覆盖属性: @Pattern(regexp="[a-zA-Z]*")
@Size
@Constraint(validatedBy = AlphanumericStringValidator.class)
@Documented
@Target({ METHOD,FIELD,ANNOTATION_TYPE,CONSTRUCTOR,PARAMETER })
@Retention(RUNTIME)
public @interface AlphanumericString {
// ...
@OverridesAttribute(constraint=Size.class,name="min")
int min() default 3
@OverridesAttribute(constraint=Size.class,name="max")
int max() default 230;
// ...
}
并使用它: @AlphanumericString(min = 100,max = 150) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
