Рубрики
Без рубрики

Проверка данных формы Thymeleaf при весенней загрузке с помощью валидатора компонентов

В этом руководстве мы расскажем, как выполнить проверку данных формы Thymeleaf при загрузке Spring с использованием хорошо известной библиотеки валидаторов компонентов.

Автор оригинала: Alex Chirea.

Вступление

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