Вступление
Проверка данных формы является очень распространенным и элементарным шагом в создании любого веб-приложения с использованием пользовательского ввода. Мы хотим убедиться, что соблюдаются определенные диапазоны и соблюдаются определенные форматы. Например, мы захотим убедиться, что пользователь не -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 .