Початок роботи у Spring Boot, Частина 7 Перевірка записів форми за допомогою Spring Boot
Подивившись на архітектуру додатків Spring-boot в останньому дописі серії, настав час перевірити введення даних користувача на правильність синтаксису.
Компанія про тему
Записи на веб-сайті слід перевіряти та повідомляти, Spring Boot пропонує для цього перевірку початку.
Найпростіший спосіб перевірки записів форми у Spring Boot – це використання Bean Validation Framework, яка існує з 2017 року у формі Bean Validation 2.0. Інтеграція фреймворку відбувається шляхом додавання такої початкової залежності до POM:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-validation</artifactId>
</dependency>
Під капотом для цього використовується валідатор Hibernate, еталонна реалізація API перевірки. В Spring Tool Suite (STS), в якості альтернативи, модуль може бути інтегрований безпосередньо через контекстне меню: Клацніть правою кнопкою миші на pom.XML, а потім Spring & gt; Додайте початківці та причину перевірки залежності . Тому система перевірки готова до використання.
Як приклад об’єкта ми беремо особу, відому з попередніх внесків, яка тепер поширюється на електронну адресу. Відтворення відповідних методів набору та отримання тут опущено з міркувань простору, ви можете легко використовувати їх у STS через Source & gt; Створення гетерів та сетерів … нехай генерує:
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 перед об’єктом людини у списку аргументів new. Анотація потрібна для активації механізму перевірки:
@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";
}
}
Якщо зараз ви спробуєте надіслати форму з порожнім іменем або прізвищем або заповненою, але невірною адресою електронної пошти, на консолі відображається помилка і відображається сторінка помилки зі стеком. Приклад такого консольного повідомлення відтворено тут:
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]
Зміст повідомлення вказує на те, що перевірка спрацювала. Тільки візуалізація результату залишає бажати кращого. Можливо, користувача слід попередити про неправильне введення приміткою на сторінці з формою; не стеком, який важко читати.
Сторінка помилки з stracktrace створюється додаванням інтерфейсу BindingResult go до списку аргументів методу post. Об’єкт можна запитувати щодо можливих помилок. Тут, у прикладі, помилки лише виводяться, а потім перенаправляються назад у форму, але за допомогою перевірки без помилок її також можна переслати на сторінку успіху за допомогою Redirect:
@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 (Dedicated Team).
(ID: 47107076)