2016-03-12 3 views
0

Я могу установить пользовательский org.springframework.validation.Validator в @InitBinder контроллера.Настройка глобального настраиваемого валидатора для Spring

Но как установить валидатор, который будет использоваться всякий раз, когда валидатор по умолчанию обрабатывает определенный класс, включая его вложенные свойства?

ответ

1

Вы можете добавить компонент @ControllerAdvice с помощью метода @InitBinder. Обязательно используйте метод addValidators вместо setValidator всего @InitBinder методов.

Что касается вложенных свойств. Это делается путем аннотации вложенного поля в классе с аннотацией @Valid.

+0

Перемещен метод '@ InitBinder' в класс' @ ControllerAdvice'. Однако даже при использовании 'addValidators' пользовательский валидатор вызывается для любого класса. Если я возвращаю 'false' из метода' support' для других классов, проверка этих классов не выполняется. Таким образом, мое текущее решение заключается в том, чтобы обернуть «валидатор» по умолчанию в пользовательский валидатор и делегировать вызовы для проверки объектов, которые я не хочу проверять на себя ... – ejain

+0

@ejain Поведение метода 'support', который вы описали, звучит странно , Не могли бы вы показать свой класс Validator и пример того, как вы вызываете проверку? –

+0

Я полагаюсь на Spring, чтобы вызывать проверку на аргументы метода контроллера, аннотированные с помощью javax.validation.Valid', например. 'public void post (@Valid @RequestBody Person p)'. Моя первоначальная реализация validator похожа на пример PersonValidator в документах по адресу http://docs.spring.io/autorepo/docs/spring/4.2.x/spring-framework-reference/html/validation.html. – ejain

Смежные вопросы