Можно ли использовать API проверки для проверки правильности модели для какой-либо внешней операции?

Итак, мы хотим разрешить пользователям выполнять миграцию вручную. Для этого объект модели должен находиться в определенном состоянии. Я не хочу автоматически проверять каждый экземпляр этого класса или действительно любой экземпляр этого класса. Я знаю, как вызвать валидатор вручную (как правило), но мне интересно, могу ли я выполнить валидатор без этих аннотаций в модели? Я просто хотел бы выполнить произвольный код проверки для модели. Причина желания использовать API-интерфейс проверки заключается в том, что он собирает нарушения ограничений.

например что-то вроде этого

class ValidForMigration implements ConstraintViolation<MyModel> {
  boolean isValid( MyModel model ) {
      if ( model.getFoo() == null ) { return false; }
      return true;
  }
}

MySvc {
   ...
   void doMigrate(... ) {
       validator.validate( myModel, new ValidForMigration() )
   }
}

person xenoterracide    schedule 22.01.2016    source источник
comment
Из интереса, почему вы хотите избежать аннотаций? Одним из их преимуществ является то, что каждый пользователь модели знает об ограничениях, которых ему необходимо придерживаться. Группы проверки могут оказаться для вас полезным решением, если вы хотите применять некоторые проверки только во время миграции, но не в других точках жизненного цикла объекта.   -  person Gunnar    schedule 23.01.2016


Ответы (1)


Проверка компонентов основана на принципе декларативных ограничений, т. е. ограничения объявляются один раз — с использованием аннотаций, дескрипторов XML или (в Hibernate Validator) API — и затем проверяются по мере необходимости в подходящих точках жизненного цикла объекта. Итак, то, что вы описываете, невозможно напрямую в Bean Validation.

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

person Gunnar    schedule 22.01.2016