Вы не можете делать это нормально.
Вот что я сделал, чтобы получить более динамические проверки, работающие с помощью Hibernate Validator.
- Расширить класс
ClassValidator
.
- Переопределить метод
getInvalidVaues(Object myObj)
. Сначала вызовите super.getInvalidValues(myObj)
, затем добавьте квитанцию для вашей индивидуальной проверки.
- Создайте свой собственный валидатор и позвоните по телефону
getInvalidValues
для подтверждения. На этом этапе начнутся любые аннотированные проверки спящего режима, и ваши пользовательские динамические проверки (все, что не поддерживается аннотациями) также начнутся.
Пример:
public class MyObjectValidator extends ClassValidator<MyObject>
{
public MyObjectValidator()
{
super(MyObject.class);
}
public InvalidValue[] getInvalidValues(MyObject myObj)
{
List<InvalidValue> invalids = new ArrayList<InvalidValue>();
invalids.addAll(Arrays.asList(super.getInvalidValues(myObj)));
// add custom validations here
invalids.addAll(validateDynamicStuff(myObj));
InvalidValue[] results = new InvalidValue[invalids.size()];
return invalids.toArray(results);
}
private List<InvalidValue> validateDynamicStuff(MyObject myObj)
{
// ... whatever validations you want ...
}
}
Таким образом, ваш персональный код может содержать логику как «Делайте это подтверждение, если пользователь настроил его, в противном случае сделать это один», и т.д. Вы можете или не можете быть в состоянии для использования того же кода, который активирует валидации спящего режима, но в любом случае то, что вы делаете, в большей степени связано с тем, что «нормальный» вариант использования для hibernate validator.
Переопределение аннотации _wont_ work. Один из способов настройки hibernate validator - написать собственные аннотации, но это не сработает для того, что пытается сделать DR, b/c у вас нет доступа к динамическим значениям во время выполнения, за исключением поля, которое аннотация прилагается. Любые входы в аннотацию для ее настройки должны быть константами. Для чего-то, что будет работать, посмотрите мой ответ ниже. –