Java – JSR 303 custom constraint override

I want to place a set of standard constraints (such as a non empty alphanumeric string with a length of 3 to 240 characters) on the field (in this case, a string) and wonder if there is a way to override some constraints in the model code Will this also be a rewrite, or will it just validate the overridden comments twice?

It should be like this

@AlphanumericString
@Size(min=100,max=150) //override standart values from AlphanumericString annotation

Thank you for your answer

OK, answer myself@ Overridesparameter helps to reassign nested annotation parameters

@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

Solution

This is a good question JSR 303 bean validation specification describes the validation routines in section 3.5

In your case, you will handle validation of a simple string field with a target group of default You have two validation constraints (@ alphanumericstring and @ size), which will be validated / processed separately in a specific order according to the document

So answer your question No, when you use @ size addaly, @ alphanumericstring does not apply any overrides To achieve what I think you are trying to do, you can create a constraint combination where you can override attributes from the composition annotation:

@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;       
   // ...
}

And use it:

@AlphanumericString(min = 100,max = 150)
The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>