Skip to content

Commit ddf494a

Browse files
authored
Update spring.md
1 parent f81e101 commit ddf494a

1 file changed

Lines changed: 53 additions & 0 deletions

File tree

spring.md

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -615,8 +615,61 @@ HTML формы в Thymeleaf очень похожи на обычные HTML ф
615615
`type="hidden"` - означает скрытое поле.
616616
Если мы используем Thymeleaf, то он сам создает за нас это скрытое поле, сами мы его не создаем.
617617

618+
![image](https://github.com/Slimercorp/java-interview/assets/116163780/c7a8daf6-9bd1-4894-a562-eba455a7e170)
619+
620+
Тут мы используем метод Thymeleaf.
621+
618622
![image](https://github.com/Slimercorp/java-interview/assets/116163780/1e78da0b-ca4d-4867-a6f0-bce3cb2bb7b9)
619623

624+
Вот так выглядит фильтр в коде:
625+
626+
![image](https://github.com/Slimercorp/java-interview/assets/116163780/694d8fd5-d6e7-4363-a07e-ea29cdbae6bb)
627+
628+
т.е. мы сами не реализуем фильтр, он уже есть в 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`.
642+
643+
![image](https://github.com/Slimercorp/java-interview/assets/116163780/01e220fc-6f36-4753-b492-7b90ee21a430)
644+
645+
## Spring Validator
646+
Если на поле в таблице БД стоит ограничение уникальности, то при повторном вводе существующего значения будет ошибка. Мы Должны обращаться к БД и проверять есть ли там уже такое значение или нет, что бы красиво обрабатывать эти ошибки у Spring есть специальный интерфейс `Validator`. Для использования Spring Validator создается отдельный класс для каждой сущности, и обычно эти классы лежать в папке проекта `util`. Мы должны реализовать два метода интерфейса `Validator`: `supports()` и `validate()`.
647+
В методе `supports()` мы должны указать Spring к какому классу этот валидатор относится, т.е. на объектах какого класса этот валидатор можно использовать.
648+
Метод `validate()` вызывается в контроллере на объекте, который приходит с формы. В аргументах этого метода объекта класса Object, т.к. этот интерфейс должен быть универсальным для всех, поэтому даункастим object до объекта нашего класса, для которого делаем валидатор.
649+
650+
![image](https://github.com/Slimercorp/java-interview/assets/116163780/23f5cf89-e54f-4ee5-80d3-d0e07a542bd2)
651+
652+
После создания валидатора можно использовать его в контроллере, для этого внедряем его и вызываем метод `validate()` в тех методах, где нужна проверка. Первым аргументом в этот метод подается объект пришедший с формы, вторым - `BindingResult`.
653+
654+
![image](https://github.com/Slimercorp/java-interview/assets/116163780/89e08553-9aa8-456c-b52f-47538a91a8c9)
655+
656+
теперь если придет невалидное знаечние из формы, то ошибка поместится в `BindingResult`, а эти ошибки обрабатываются на стороне представления.
657+
658+
## Валидация паттернов
659+
__@Pattern__ позволяет проверить строку на соответствие паттерну.
660+
661+
![image](https://github.com/Slimercorp/java-interview/assets/116163780/0861b2ae-4605-493f-85ab-29c8b3604c6f)
662+
663+
В аргументы этой аннотации подается регулярное выражение, которому должна соответствовать проверяемая строка, и сообщение об ошибке, если строка не пройдет проверку.
664+
665+
666+
667+
668+
669+
670+
671+
672+
620673

621674

622675

0 commit comments

Comments
 (0)