Можно ли установить порядок проверки с помощью Hibernate Validator? - PullRequest
0 голосов
/ 20 января 2010

Я использую аннотацию @AssertTrue, чтобы обеспечить выполнение метода, который устанавливает некоторые значения по умолчанию (всегда возвращает true). Эти установленные значения проверяются как @NotEmpty (это строки). Поэтому я должен гарантировать, что метод, помеченный @AssertTrue, выполняется строго перед полями, помеченными @NotEmpty.

Пример упрощенного кода (не включая аннотации Hibernate):

public class MyClass {
   @NotEmpty
   private String myField = null;

   @SuppressWarnings("unused")
   @AssertTrue
   private boolean fillDefaultValues() {

      if (this.myField == null) {
         this.myField = "default value";
      }

      return true;
   }
}

Ответы [ 2 ]

1 голос
/ 20 января 2010

Это кажется мне взломом. По двум причинам:

  • вы всегда возвращаете true и утверждаете его с единственной целью выполнения кода инициализации
  • вы ожидаете, что инфраструктура получит доступ к вашему бину и проверит его в определенном порядке для выполнения кода инициализации

Общим является "код инициализации" . Чтобы достичь желаемого, вы можете зарегистрировать слушателя и выполнить метод инициализации до того, как произойдет проверка. Вот документация hibernate-validator - она ​​рассказывает о слушателях событий.

Вы также можете вручную установить значения по умолчанию в вашем сервисном слое (поскольку вы, похоже, используете анемичную модель данных). Поскольку это похоже на бизнес-логику, лучше, чтобы в методе службы был сохранен объект.

0 голосов
/ 22 января 2010

Наконец-то я решил свою проблему.

Отладка трассировки стека валидаторов, я видел, что сначала он обрабатывает beanValidators, а затем memberValidators. Поэтому единственное, что мне нужно сделать, это определить мой код инициализации в ограничении класса.

Я определил новую аннотацию класса, в которой, в зависимости от типа полученного pojo, я устанавливаю значения по умолчанию.

Я убедился, что этот код выполняется раньше, чем любой другой (участник) constarint, такой как @NotEmpty и т. Д.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...