Иногда может быть необходимо использовать ручную проверку в 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
|
@Autowired private 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 . |