Есть ли способ повторно использовать вместо проверки Hibernate реализацию Bean Validation во время выполнения? - PullRequest
0 голосов
/ 15 марта 2019

Например, у меня есть класс:

@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 ).Есть ли способ повторно использовать эту реализацию проверки в моем настраиваемом валидаторе?

1 Ответ

2 голосов
/ 15 марта 2019

Официального способа повторно использовать валидатор в другом нет.

Однако вы можете инициализировать атрибут EmailValidator в initialize() и вызвать его метод isValid() в вашем isValid() method.

Имейте в виду, что EmailValidator является внутренним, поэтому в будущем оно может быть изменено.

...