Например, у меня есть класс:
@Getter
@Setter
class Notification {
private String recipient;
private Channel channel;
enum Channel {
SMS, EMAIL
}
}
Я мог бы определить свой собственный валидатор, например:
@Target(TYPE)
@Retention(RUNTIME)
@Constraint(validatedBy = {RecipientValidator.class})
@interface ValidRecipient {
// required arguments of validation annotation
}
class RecipientValidator implements ConstraintValidator<ValidRecipient, Notification> {
@Override
public void initialize(ValidRecipient annotation) {
}
@Override
public boolean isValid(Notification value, ConstraintValidatorContext context) {
boolean result = true;
if (value.getChannel() == SMS) {
return matches(value.getRecipient(), "<phone-number-regexp>");
}
if (value.getChannel() == EMAIL) {
// can I reuse Hibernate's Email Validation there?
return matches(value.getRecipient(), "<email-regexp>");
}
return result;
}
}
Конечно, я могу Google regexp электронной почты и скопировать- вставьте, но реализация проверки компонентов Hibernate уже имеет проверку электронной почты (под аннотацией @ Email ).Есть ли способ повторно использовать эту реализацию проверки в моем настраиваемом валидаторе?