Как получить пути свойств от нарушения аннотации на уровне класса - PullRequest
1 голос
/ 09 июня 2011

Я использую Hibernate Validator. У меня есть аннотация уровня класса. Он сравнивает три свойства на равенство. Когда проверка выполнена, мне нужно получить PropertyPaths из возвращенного объекта javax.validation.ConstraintViolation. Так как это не одно поле, метод getPropertyPath () возвращает ноль. Есть ли другой способ найти PropertyPaths?

Это моя реализация аннотации -

@MatchField.List({
@MatchField(firstField = "firstAnswer", secondField = "secondAnswer", thirdField = "thirdAnswer"),
})

1 Ответ

2 голосов
/ 09 июня 2011

Вам необходимо настроить отображение сообщений на свойства, которые вы хотите отклонить при выполнении проверки. Hibernate Validator не может автоматически определить, что пользовательские свойства аннотации являются путями свойств.

public class MatchFieldValidator implements ConstraintValidator<MatchField, Object> {

  private MatchField matchField;

  @Override
  public void initialize(MatchField matchField) {
    this.matchField = matchField;
  }

  @Override
  public boolean isValid(Object obj, ConstraintValidatorContext cvc) {

    //do whatever you do
    if (validationFails) {
      cvc.buildConstraintViolationWithTemplate("YOUR FIRST ANSWER INPUT IS WRONG!!!").
                        addNode(matchField.firstAnswer()).addConstraintViolation();
      cvc.buildConstraintViolationWithTemplate("YOUR SECOND ANSWER INPUT IS WRONG!!!").
                        addNode(matchField.secondAnswer()).addConstraintViolation();
      //you get the idea
      cvc.disableDefaultConstraintViolation();
      return false;
    }
  }
}
...