You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
т.е. мы сами не реализуем фильтр, он уже есть в Spring, мы просто его добавляем к нашему приложению.
629
+
630
+
## Валидация форм. Аннотация `@Valid`
631
+
Для валидирования значений нужно импортировать зависимость Hibernate Validator Engine.
632
+
Помечаем поля модели аннотациями валидации :
633
+
+@NotEmpty
634
+
+@Size
635
+
+@Min
636
+
+@Max
637
+
+@Email
638
+
+ и другие
639
+
640
+
Значения, которые приходят из форм обрабатываются в контроллере. И что бы эти значения из формы валидироались нужно поставить `@Valid` на модель, теперь на этапе внедрения значений в объект `@Valid` будет проверять эти значения на условия, которые были заданы в классе сущности. Если условия нарушаются, то пояляется ошибка, и эта ошибка помещается в отдельный объект `BindingResult`. ВАЖНО! Объект `BindingResult` должен всегда идти всегда сразу после модели, которая валидируется.
641
+
У этого объекта с ошибками есть специальный метод `hasErrors()`, который говорит есть ли ошибки в `BindingResult`.
Если на поле в таблице БД стоит ограничение уникальности, то при повторном вводе существующего значения будет ошибка. Мы Должны обращаться к БД и проверять есть ли там уже такое значение или нет, что бы красиво обрабатывать эти ошибки у Spring есть специальный интерфейс `Validator`. Для использования Spring Validator создается отдельный класс для каждой сущности, и обычно эти классы лежать в папке проекта `util`. Мы должны реализовать два метода интерфейса `Validator`: `supports()` и `validate()`.
647
+
В методе `supports()` мы должны указать Spring к какому классу этот валидатор относится, т.е. на объектах какого класса этот валидатор можно использовать.
648
+
Метод `validate()` вызывается в контроллере на объекте, который приходит с формы. В аргументах этого метода объекта класса Object, т.к. этот интерфейс должен быть универсальным для всех, поэтому даункастим object до объекта нашего класса, для которого делаем валидатор.
После создания валидатора можно использовать его в контроллере, для этого внедряем его и вызываем метод `validate()` в тех методах, где нужна проверка. Первым аргументом в этот метод подается объект пришедший с формы, вторым - `BindingResult`.
В аргументы этой аннотации подается регулярное выражение, которому должна соответствовать проверяемая строка, и сообщение об ошибке, если строка не пройдет проверку.
0 commit comments