Вступление
Проверка данных формы является очень распространенным и элементарным шагом в создании любого веб-приложения с использованием пользовательского ввода. Мы хотим убедиться, что соблюдаются определенные диапазоны и соблюдаются определенные форматы. Например, мы захотим убедиться, что пользователь не -345
лет или что их адрес электронной почты действителен.
Существует множество способов проверки данных формы, и используемый вами метод зависит от вашего приложения. В общем случае вам потребуется выполнить проверку на стороне клиента , а также проверку на стороне сервера . Проверка на стороне клиента гарантирует, что нефильтрованные данные даже не достигнут серверной части, в то время как проверка на стороне сервера гарантирует, что неправильные данные не будут обработаны в дальнейшем.
В этой статье мы рассмотрим как выполнить проверку данных формы в Spring Boot с помощью Thymeleaf в качестве движка шаблонов.
Мы будем использовать встроенный в Spring Boot API проверки компонентов , который делает этот процесс простым и понятным.
Зависимость Maven для проверки весенней Загрузки
Spring Boot позволяет нам определять критерии проверки с помощью аннотаций. В вашей модели домена вы можете просто аннотировать поля с ограничениями, и она будет применять их.
Чтобы аннотации проверки работали, нам нужно добавить следующую зависимость:
org.springframework.boot spring-boot-starter-validation
Модель предметной области
Давайте определим простое POJO с несколькими полями, которые мы хотим проверить:
@Entity public class Person { @Id @GeneratedValue(strategy= GenerationType.AUTO) private Long id; @NotEmpty @Size(min = 5) private String fullName; @NotEmpty @Email private String email; @NotNull @Min(value = 18) private Integer age; // Getters and Setters }
Теперь давайте разберем аннотации, которые мы использовали:
@NotEmpty
– используется для ограничения поля типаСтрока
,Коллекция
,Карта
илиМассив
, чтобы оно не былонулевым
или пустым.@Size([min,])
– используется для определения правил размераСтроки
,Коллекции
,Карты
илиМассива
.@Email
– помогает нам проверить строку на соответствие регулярному выражению, которое определяет структуру действительного электронного письма.@NotNull
– указывает Spring, что поле не должно быть пустым, но оно может быть пустым .@Min
и@Max
используются для указания пределов переменной. Например, возраст@Min
может быть установлен, скажем, на 18 лет.
Уровень сохраняемости – Репозиторий
Чтобы создать простую базу данных, все, что нам нужно сделать, это расширить JpaRepository
и предоставить нашу модель домена и тип данных Kids:
@Repository public interface PersonRepository extends JpaRepository{ }
Создание формы с помощью Thymeleaf
Теперь давайте создадим простую форму с использованием HTML и начальной загрузки для сбора информации:
Форма указывает на /добавить
и отправляет ОТПРАВИТЬ
запрос. Поля в нашем объекте полное имя
, возраст
и электронная почта
находятся в форме, обозначаемой th:поле
. Поскольку у нас есть наш th:object=${person}
,мы можем ссылаться на этот person
объект, заменив его *
перед полями.
*{*{полное имя}
совпадает с ${человек.полное имя}
. Каждый вход также имеет скрытый , который отображается только в том случае, если
${#fields.hasErrors()}
вызывает значение true
. Если ошибок нет, этот div не существует. Если они есть, тег th:ошибки
позволяет нам указать сообщение. Если мы просто передадим поле, которое вызывает ошибку , например th:errors="*{возраст}"
, для этого поля будет использоваться сообщение по умолчанию из API-интерфейса валидатора компонентов.
В результате получается форма, которая выглядит следующим образом:
Поскольку эти сообщения не очень удобны для пользователя, мы захотим настроить их, предоставив наши собственные сообщения.
Контроллер
Теперь давайте создадим контроллер, который будет обрабатывать запрос на сохранение Человека
в базу данных. Как обычно, у нас будет @GetMapping()
для отображения формы и @PostMapping
для обработки запроса. В подписи метода @PostMapping
мы будем аннотировать POJO с помощью @Valid
.
Аннотация @Valid
запускает валидатор компонента , чтобы проверить, соответствуют ли поля, заполненные в объекте, аннотациям, которые мы использовали в определении класса. Если вы не используете аннотацию @Valid
, она ничего не проверит, и даже значения, которые вы, возможно, не ожидали, могут быть заполнены в объекте.
В нашем случае объект Person person
– это объект, заполненный входными данными формы:
@GetMapping("/add") public String showAddPersonForm(Person person) { return "add-person"; } @PostMapping("/add") public String addPerson(@Valid Person person, BindingResult result, Model model) { if (result.hasErrors()) { return "add-person"; } repository.save(person); return "redirect:/index"; }
Если с этим Человеком
возникнут какие-либо проблемы , атрибут ${поля}
будет содержать ошибки, связанные с полем, вызвавшим ошибку.
Настройка Сообщений Об Ошибках
Чтобы задать пользовательское сообщение для любого ограничения проверки, вы можете использовать параметр сообщение
:
@NotEmpty(message = "Field can't be empty!) private String field;
Вы можете просто записать эти сообщения в свою модель, вот так. Тем не менее, считается хорошей практикой помещать сообщения о проверке в файл свойства
, на который вы можете ссылаться. Это делается потому, что вы можете объединить все сообщения о проверке вместе и обновить их, если модели будут изменены позже.
Давайте сделаем наш ValidationMessages.properties
в разделе src/основные/ресурсы
:
Size.Person.FullName=The Full Name should have at least 5 characters
Затем мы изменим Персону
модель и предоставим это свойство в качестве сообщения
аннотации @Size
:
Git Essentials
Ознакомьтесь с этим практическим руководством по изучению Git, содержащим лучшие практики и принятые в отрасли стандарты. Прекратите гуглить команды Git и на самом деле изучите это!
@NotEmpty(message = "The Full Name can't be null") @Size(min = 5, message = "{Size.Person.FullName}") private String fullName;
Давайте вернемся к нашей форме и посмотрим, как она выглядит сейчас:
Вывод
В этой статье мы рассмотрели, как использовать API проверки компонентов, который Spring Boot использует для легкого выполнения проверки данных формы с помощью Thymeleaf.
Мы создали модель домена, снабдили наши поля комментариями с ограничениями валидатора компонентов. Затем мы создали репозиторий и контроллер для отображения формы и ее обработки, а также сохранения соответствующей информации в объекте Person
, убедившись, что поля проверены с помощью аннотации @Valid
.
Вы можете найти исходный код на GitHub .