Bonjour.
Continuons à implémenter la gestion des exceptions jusqu'à la dernière fois!
1: [Comprendre les super bases] Une brève description de MVC 2: [Préparer un modèle] Je veux créer un modèle avec Spring Initializr et créer un monde Hello 3: [Connexion / Paramètres / Affichage des données avec MySQL] Enregistrer les données temporaires dans MySQL-> Tout obtenir-> Afficher en haut 4: [Fonction POST] Implémentation de la fonction de publication 5: [Fonction PATCH] Basculer l'affichage TODO 6: [Easy to use JpaRepository] Implémentation de la fonction de recherche [7: [Commun avec les fragments de modèle Thymeleaf] Créer un en-tête] (https://qiita.com/nomad_kartman/items/8c33eca2880c43a06e40) [8: [Fonction PUT] Implémentation de la fonction d'édition] (https://qiita.com/nomad_kartman/items/66578f3f91a422f9207d) [9: [Tweak] Trier l'affichage TODO dans l'ordre chronologique + Régler la date d'échéance à la date d'aujourd'hui] (https://qiita.com/nomad_kartman/items/5ee2b13a701cf3eaeb15) 10: [Gestion des exceptions avec le ressort] Un bref résumé de la gestion des exceptions [11: [Gestion des exceptions avec ressort] Gestion des exceptions lors de l'accès à TODO avec un ID inexistant] (https://qiita.com/nomad_kartman/items/a486838153a563767169) [12: [Gestion des exceptions au printemps] Traitement lorsqu'une requête arrive avec un HttpMethod / Processing inutilisé lorsqu'une erreur se produit sur le serveur] (https://qiita.com/nomad_kartman/items/8a1a06b42138b495e29c) 13: [Gestion des exceptions avec ressort] Validation du formulaire TODO 1: Limite de caractères - Mettre à jour Gradle pour utiliser @Validated
Spring de cette application utilise la Version2.3.0.RELEASE
.
Si vous regardez 2.3 Release Note, vous pouvez voir les annotations qui seront utilisées cette fois, telles que @Validated et @Size. Il ne peut pas être utilisé par défaut.
Donc, selon le contenu du lien ci-dessus, ajoutez les liens liés à la validation à la partie dépendance de build.gradle
.
build.gradle
dependencies {
//Abréviation
implementation 'org.springframework.boot:spring-boot-starter-validation'
}
En ajoutant cette dépendance, des annotations liées à la validation peuvent être utilisées.
Le gradle sera mis à jour car il ne sera pas reflété simplement en l'ajoutant. Veuillez vous référer à l'image ci-dessous.
Une fois la mise à jour terminée avec succès, l'étape suivante consiste à modifier le contrôleur et à vérifier la classe de données de formulaire utilisée pour publier TODO.
Commençons par vérifier le contenu de validation de ce TODO.
Ce sont les trois points. Cette fois, je validerai le cas où il est de 1 à 30 caractères.
java/com/example/todo/TodoForm.java
package com.example.todo;
import com.sun.istack.NotNull;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.Size;
import java.time.LocalDate;
@Data
public class TodoForm {
private long Id;
@NotNull
@Size(min = 1, max =30)
private String title;
@DateTimeFormat(pattern = "yyyy-MM-dd")
private LocalDate deadline;
private boolean status;
}
Ça ressemble à ça.
@ NotNull
n'autorise pas la valeur null pour title (contenu de l'article)
.
«@ size» peut être les caractères minimum et maximum.
python
@PostMapping("/register")
public String register(@Validated @ModelAttribute TodoForm formData, BindingResult error, RedirectAttributes attributes) {
if(error.hasErrors()) {
attributes.addFlashAttribute("errorMessages", error);
return "redirect:/top";
}
todoService.setTodo(formData);
return "redirect:/top";
}
Ajout de @ Validated
,BindingResult
,RedirectAttributes
.
@ Validated
est une annotation qui vérifie le contenu de validation du contenu publié TodoForm
.
Vous pouvez maintenant rechercher Null et déterminer le nombre de caractères.
Si la validation est interceptée, le contenu de l'erreur est enregistré dans la erreur de variable de classe BindingResult
.
RedirectAttributes
est utilisé pour revenir au premier plan.
C'est une branche conditionnelle lorsque le contenu de l'erreur est enregistré par erreur dans la partie de if (error.hasErrors ()) ...
(c'est-à-dire qu'il est bloqué en validation).
Nous transmettons «error» comme «variable errorMessages» au début.
Ajoutez ce qui suit directement sous l'en-tête.
resources/templates/top.html
<!--Zone d'affichage des messages d'erreur-->
<th:block th:if="${errorMessages}">
<th:block th:each="error : ${errorMessages.getAllErrors()}">
<div class=" w-75 h-auto my-1 mx-auto pt-5">
<p class="text-center text-danger" th:text="${error.defaultMessage}"></p>
</div>
</th:block>
</th:block>
J'ai écrit plus tôt que je passerai errorMessages
quand il y a une erreur, mais hier dans Thymeleaf, j'ai ajouté une instruction if pour déterminer s'il y a des messages d'erreur.
S'il y a des erreurs, chaque instruction les affichera toutes une par une.
Il y a th: text =" $ {error.defaultMessage} "
, mais le contenu du message d'erreur peut être obtenu avec .defaultMessage
.
Si vous essayez de saisir plus de 30 caractères, le message suivant s'affiche.
Je n'y toucherai pas cette fois, mais vous pouvez changer ce message en ce que vous voulez!
Dans le prochain article, je reviendrai sur les deux validations restantes!