Иногда может быть необходимо использовать ручную проверку в Spring MVC @Controller. Это очень просто с классом Spring org.springframework.validation.ValidationUtils . Узнайте, как вызвать валидатор в двух разных сценариях.
Сценарий 1 — вызвать проверку
В этом сценарии у меня есть пользовательская форма с полем имени пользователя. Поле имени пользователя проверяется с помощью пользовательского валидатора, чтобы проверить наличие, например, в базе данных.
|
1
2
3
4
5
6
|
public class User { @UserExists private String username;} |
В классе контроллера у меня есть метод, который обрабатывает метод POST этого объекта:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
@Autowiredprivate org.springframework.validation.Validator validator;@RequestMapping(value = "/user", method = RequestMethod.POST)public String validate(@ModelAttribute User user, Errors errors) { ValidationUtils.invokeValidator(validator, user, errors); if (errors.hasErrors()) { // error, show errors to the user } // success, form is valid!} |
org.springframework.validation.ValidationUtils — это класс для вызова org.springframework.validation.Validator .
Обратите внимание, что за параметром пользователя следует объект org.springframework.validation.Errors . Spring инициализирует этот объект, но он пуст и может быть передан в метод invokeValidator .
Сценарий 2 — вызвать проверку с подсказками
В этом случае пользовательская форма становится немного сложнее:
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
|
@GroupSequence(value = {ValidationOrder.First.class, ValidationOrder.Second.class})interface ValidationOrder { interface First {} interface Second {}}public class User { @UserExists(groups = ValidationOrder.First.class) @UserIsEntitledToDiscount(groups = ValidationOrder.Second.class) private String username;} |
Благодаря @GroupSequence я мог определиться с порядком проверки. Чтобы запустить проверку, мне нужно передать дополнительный аргумент в метод invokeValidator чтобы группы использовались правильно:
|
1
|
ValidationUtils.invokeValidator(validator, user, errors, ValidationOrder.class); |
Исходный код
Исходный код содержит все три подхода, так что вы можете быстро сравнить их: https://github.com/kolorobot/spring-mvc-beanvalidation11-demo
| Ссылка: | Spring MVC: ручная проверка Trgger объекта формы от нашего партнера JCG Рафаля Боровца в блоге Codeleak.pl . |