Form input validation with Spring Boot

Початок роботи у Spring Boot, частина 7 Форма перевірки вводу за допомогою Spring Boot

Після того, як ми кинули в останню публікацію серії, погляд на архітектуру додатків Spring Boot, тестування вводу користувача (outsourcing work) на синтаксичну правильність.

Компанія до теми
Записи на веб-сторінці повинні бути перевірені та повідомлені, Spring Boot надає засіб перевірки для перевірки.
Записи на веб-сторінці повинні бути перевірені та повідомлені, Spring Boot надає засіб перевірки для перевірки.

Вводити форму перевірки у Spring Boot можна легко за допомогою фреймворку Bean Validation, який існує з 2017 року у формі Bean Validation 2.0. Інтеграція фреймворку здійснюється шляхом додавання наступної залежності Starter в POM:

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>

Під капотом використовується Hibernate-Validator, посилальна реалізація Validation API для цієї мети. У Spring Tool Suite (STS) можна інтегрувати модуль безпосередньо через контекстне меню: клацніть правою кнопкою миші на pom.xml, а потім Spring> Add a starter виберіть залежність додавання Validation . Рамка перевірки готова до використання.

Як приклад, ми беремо попередні внески від добре відомої особи, які тепер розширено, включаючи адресу електронної пошти. Під час відтворення відповідного методу set і get тут не вистачає з міркувань простору, ми можемо у STS легко Source> Generate Getters and Setters … produce:

public class Person {   private String firstname;
private String lastname;
private String email;
// ...
}

Перевірка людей властивостей здійснюється шляхом анотування відповідних властивостей. Щоб забезпечити заповнення, наприклад, імені та прізвища, саме для цих властивостей використовується Анотація @NotBlank . Дійсною електронною поштою може бути @Email force:

public class Person {   @NotBlank
private String firstname;
   @NotBlank
private String lastname;
   @Email
private String email;
   // ...
}

Вид Thymeleaf для надсилання форми також з попереднього повідомлення, він також відомий, також вас буде додано до адреси електронної пошти:

<!DOCTYPE HTML>
<html xmlns_th="http://www.thymeleaf.org">
<head>
<title>Home</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
   <h1>Benutzerdaten eingeben:</h1>
<form action="https://www.dev-insider.de/formulareingaben-validieren-mit-spring-boot-a-996378/#" th_action="@{/}" th_object="${person}" method="post">
<p>
Vorname: <input type="text" th_field="*{firstname}" />
</p>
<p>
Nachname: <input type="text" th_field="*{lastname}" />
</p>
<p>
Email: <input type="text" th_field="*{email}" />
</p>
<p>
<input type="submit" value="Submit" /> <input type="reset"
value="Reset" />
</p>
</form>
</body>
</html>

У методі контролера, який отримує запит на публікацію, анотація @Valid перед об’єктом Person у списку аргументів. Анотація потрібна для активації механізму перевірки:

@Controller
public class PersonController {
   @GetMapping("https://www.dev-insider.de/")
public String home(Model model) {
Person person = new Person();
model.addAttribute(person);
return "home";
}
   @PostMapping("https://www.dev-insider.de/")
public String home(@Valid Person person, Model model) {
model.addAttribute(person);
return "home";
}
}

Зараз він намагається сформувати з пустим ім’ям чи прізвищем або заповненою, але недійсною адресою електронної пошти, яку потрібно надіслати, у консолі з’являється помилка та відображається сторінка помилки за допомогою Stacktrace. Приклади будуть наведені тут, таке повідомлення консолі:

Field error in object 'person' on field 'firstname': rejected value []; codes [NotBlank.person.firstname,NotBlank.firstname,NotBlank.java.lang.String,NotBlank]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [person.firstname,firstname]; arguments []; default message [firstname]]; default message [darf nicht leer sein]

Зміст повідомлення свідчить про те, що перевірка працює. Тільки візуалізація результату зліва. Можливо, користувач повинен бути більше позначений приміткою на сторінці з формою на неправильному введенні; не важким для читання стеком Trace.

Сторінка помилки з трасуванням Strack полягає в додаванні результату прив’язки інтерфейсів до списку аргументів методу Post у лоті. Об’єкт можна запитати про будь-які наявні помилки. У цьому прикладі помилки виводяться лише, а потім повертаються до форми для маршрутизації, але це може бути для безпомилкової перевірки за допомогою перенаправлення на сторінку успіху вперед:

@PostMapping("https://www.dev-insider.de/")
public String home(@Valid Person person, BindingResult bindingResult, Model model) {
   if (bindingResult.hasErrors()) {
bindingResult.getAllErrors().stream().forEach(System.out::println);
}
model.addAttribute(person);
return "home";
}

Виявлена ​​помилка перевірки буде передана у форму HTML і може відображатися:

<p th_if="${#fields.hasErrors('firstname')}" th_errors="*{firstname}"/>

Текст повідомлення (“не повинен бути порожнім”) в анотації перевірки за допомогою повідомлення атрибута може бути скоригований:

public class Person {   @NotBlank(message = "Vorname muss angegeben werden")
private String firstname;
}

Знайдено неправильні записи у формі.

Знайдено неправильні записи у формі. (Зображення: доктор Коллер)

Як показує знімок екрана, результат досить корисний. На практиці ви забарвлюєте текстові поля, а повідомлення про помилки все ще використовують CSS у червоний колір.

На додаток до вищезазначених анотацій до деяких інших, з якими, наприклад, все ще існують певні числові порогові значення або значення логічної змінної для перевірки:

Детальну інформацію про точне використання анотацій можна знайти в документації до Hibernate-Validator.

(ID: 47107076)

Ready to see us in action:

More To Explore

IWanta.tech
Logo
Enable registration in settings - general
Have any project in mind?

Contact us:

small_c_popup.png