[JAVA] Organisez les différences de comportement de @NotBlank, @NotEmpty et @NotNull avec Spring Boot + Thymeleaf

Chose que tu veux faire

Je n'ai pas bien compris le comportement de JSR-303 Bean Validation, ce qui a semé la confusion sur le terrain, je vais donc essayer de l'organiser. Plus précisément, les annotations suivantes. · Javax.validation.constraints.NotBlank (@NotBlank) · Javax.validation.constraints.NotEmpty (@NotEmpty) · Javax.validation.constraints.NotNull (@NotNull)

Conclusion

wwwww.PNG

Veuillez noter que si tous les espaces sont des espaces pleine largeur, la vérification ne sera pas interceptée.

Vérification

J'ai essayé de le vérifier sur l'écran simple suivant.

HelloController.java


package com.example.demo.controller;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;

import com.example.demo.form.HelloForm;

@Controller
@RequestMapping(value = "/")
public class HelloController {
	
	private static final String SAMPLE_URL = "sample/Hello";

	@GetMapping
	public String index(@ModelAttribute HelloForm helloForm) {
		return SAMPLE_URL;
	}

	@PostMapping
	public String register(@Validated HelloForm helloForm, BindingResult result) {
		return SAMPLE_URL;
	}
}

HelloForm.java


package com.example.demo.form;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;

public class HelloForm {
	
	@NotBlank
	String notBlankField;
	
	@NotEmpty
	String notEmptyField;
	
	@NotNull
	String notNullField;
	
	public String getNotBlankField() {
		return notBlankField;
	}

	public void setNotBlankField(String notBlankField) {
		this.notBlankField = notBlankField;
	}

	public String getNotEmptyField() {
		return notEmptyField;
	}

	public void setNotEmptyField(String notEmptyField) {
		this.notEmptyField = notEmptyField;
	}

	public String getNotNullField() {
		return notNullField;
	}

	public void setNotNullField(String notNullField) {
		this.notNullField = notNullField;
	}
}

Hello.html


<!DOCTYPE HTML>
<html xmlns:th="http://www.thymeleaf.org">
<head>
<title>Hello</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
	<form method="post" action="/" th:object="${helloForm}">
		<span th:if="${#fields.hasErrors('notBlankField')}" th:errors="*{notBlankField}" style="color: red"></span><br /> 
		NotBlankField:<input type="text" name="notBlankField" th:field="*{notBlankField}" /><br /> 
		<span th:if="${#fields.hasErrors('notEmptyField')}" th:errors="*{notEmptyField}" style="color: red"></span><br /> 
		NotEmptyField:<input type="text" name="notEmptyField" th:field="*{notEmptyField}" /><br /> 
		<span th:if="${#fields.hasErrors('notNullField')}" th:errors="*{notNullField}" style="color: red"></span><br /> 
		NotNullField:<input type="text" name="notNullField" th:field="*{notNullField}" /><br /><br />
		<input type="submit" value="Submit" />
	</form>
</body>
</html>

Caractères vides

Seuls NotBlank et NotEmpty restent bloqués dans le chèque 空文字.PNG

Tous les espaces demi-largeur

Tout l'espace pleine largeur

c'est tout.

Recommended Posts

Organisez les différences de comportement de @NotBlank, @NotEmpty et @NotNull avec Spring Boot + Thymeleaf
Voir le comportement de redirection relative avec le paramètre server.tomcat.use-relative-redirects dans Spring Boot
Voir le comportement des mises à jour d'entités avec Spring Boot + Spring Data JPA
Spécifiez le codage des ressources statiques dans Spring Boot
Accédez au h2db intégré de Spring Boot avec jdbcTemplate
Vérifiez le comportement de getOne, findById et des méthodes de requête avec Spring Boot + Spring Data JPA
Une histoire remplie des bases de Spring Boot (résolu)
Utilisez thymeleaf3 avec le parent sans spécifier spring-boot-starter-parent dans Spring Boot
Comment utiliser Thymeleaf avec Spring Boot
Obtenez une instance proxy du composant lui-même dans Spring Boot
Coexistence de Flyway dans la base de données embarquée (h2) de l'environnement de développement et la base de données des versions (SQL Server) avec Spring Boot
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Desserrer la vérification de la syntaxe de Thymeleaf dans Spring Boot
Implémenter CRUD avec Spring Boot + Thymeleaf + MySQL
Implémenter la fonction de pagination avec Spring Boot + Thymeleaf
[Java] [Spring] Tester le comportement de l'enregistreur
Exécutez l'application WEB avec Spring Boot + Thymeleaf
Obtenez le chemin défini dans la classe Controller de Spring Boot sous forme de liste
Paramètres du gestionnaire de ressources lors de la livraison du SPA avec la fonction de ressource statique de Spring Boot
Comment définir des variables d'environnement dans le fichier de propriétés de l'application Spring Boot
Testez le contrôleur avec Mock MVC dans Spring Boot
Traitement asynchrone avec exécution régulière dans Spring Boot
L'histoire de la montée de la série Spring Boot 1.5 à la série 2.1
Vérifions la sensation de Spring Boot + Swagger 2.0
Créez une application CRUD avec Spring Boot 2 + Thymeleaf + MyBatis
Créez votre propre utilitaire avec Thymeleaf avec Spring Boot
Afficher la tâche Gradle dans le projet Spring Boot
[Spring Boot] L'histoire selon laquelle le bean de la classe avec l'annotation ConfigurationProperties n'a pas été trouvé
Inclure le pot externe dans le package avec Spring boot2 + Maven3
Exécution asynchrone des requêtes examinée dans Spring Boot 1.5.9
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
05. J'ai essayé de supprimer la source de Spring Boot
J'ai essayé de réduire la capacité de Spring Boot
Vérifiez le comportement de Java Intrinsic Locks avec bpftrace
SSO avec GitHub OAuth dans l'environnement Spring Boot 1.5.x
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Créer Restapi avec Spring Boot (jusqu'à l'exécution de l'application)
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 1
Comment démarrer par environnement avec Spring Boot de Maven
Vérifiez le comportement de include, exclude et ExhaustedRetryException de Spring Retry
Jusqu'à ce que vous commenciez à développer avec Spring Boot dans eclipse 2
Spécifiez spring.profiles.active via context-param dans web.xml dans Spring Boot
Contrôlez le flux de traitement Spring Batch avec JavaConfig.
Création d'un environnement de base de données avec Docker dans Spring Boot (IntellJ)
Comment utiliser la même classe Mapper dans plusieurs sources de données avec Spring Boot + MyBatis
Traitement de branche avec la valeur de retour de RestTemplate et le code d'état de ResponseEntity dans Spring Boot
Découvrons comment recevoir avec Request Body avec l'API REST de Spring Boot
Télécharger avec Spring Boot
Spring Boot 1.x atteindra EOL l'année prochaine.
L'histoire de la montée de Spring Boot de la série 1.5 à la série 2.1 part2
À propos de la fonction de Spring Boot en raison de différentes versions
Changez la cible d'injection pour chaque environnement avec Spring Boot 2
Mettez le fichier dans les propriétés de string avec la configuration spring xml
Accélérez les tests des validateurs qui nécessitent DI dans Spring Boot
Découpez SQL en fichier de propriété avec jdbcTemplate of spring boot
Jusqu'à INSERT et SELECT sur Postgres avec botte de printemps et feuille de thym
Essayez d'utiliser l'API de recherche de code postal avec Spring Boot
Introduction de la bibliothèque ff4j qui réalise le basculement de fonctionnalités avec Spring Boot
Trouvez le nombre de jours dans un mois avec Kotlin
Connectez-vous avec HttpServletRequest # login dans Spring Security dans l'environnement Servlet 3.x