2

My question is a branch of of this one.

I have a Annotation (say phone annotation) that I want to validate. I can use @phone validator to check if a phone object is valid or not. I want to also be able to place this validator on a contact information object that contains a phone. Is there a way to use multiple validators for one annotation so I can use @phone for my phone object and my contact information object?

Would something like
@Constraint(validatedBy = {PhoneIsValid.class, PhoneIsValid2.class})
work? (The idea being one Validator handles the phone object and the other handles the contact information object.)

Cœur
  • 37,241
  • 25
  • 195
  • 267
SyntaxRules
  • 2,056
  • 23
  • 32

1 Answers1

7

It is possible to have multiple validators for the same annotation type. As you mentioned, you have define all of them in the @Constraint annotation.

Annotaion:

@Documented
@Target({ ElementType.ANNOTATION_TYPE, ElementType.FIELD })
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = { ValidPhonePhoneValidator.class, ValidPhoneContactValidator.class })
public @interface ValidPhone {

  String message() default "";
  Class<?>[] groups() default { };
  Class<? extends Payload>[] payload() default { };
} 

Validator1:

public class ValidPhonePhoneValidator implements ConstraintValidator<ValidPhone, Phone> { ... }

Validator2:

public class ValidPhoneContactValidator implements ConstraintValidator<ValidPhone, Contact> { ... }
matthias
  • 711
  • 4
  • 15