[JAVA] La validation de printemps était importante dans l'ordre de Form et BindingResult

introduction

Ravi de vous rencontrer, c'est NekoSarada1101. C'est le premier message de Qiita. J'étudie Java et les servlets dans une école professionnelle. J'étudie actuellement le framework Spring par moi-même et je publierai un article sur une erreur qui a pris du temps à résoudre.

Sujet principal

J'ai défini le contrôleur suivant pour valider la saisie de l'écran de connexion de l'application Web développée pour étudier Spring.

@PostMapping("/auth")
public String postLogin(@ModelAttribute @Validated LoginForm form, Model model, BindingResult result) {
    if (result.hasErrors()) {
        return "login";
    }
    User user = userService.login(form.getId(), form.getPassword());
    model.addAttribute("user", user);

    return "redirect:/menu";
}

S'il n'y a pas de problème avec l'entrée, revenez à l'écran suivant, et s'il y en a, revenez à l'écran de connexion. Lorsque j'envoie une demande à ce contrôleur ...

Whitelabel Error Page
This application has no explicit mapping for /error, so you are seeing this as a fallback.

Tue Apr 28 14:36:33 JST 2020
There was an unexpected error (type=Bad Request, status=400).

L'erreur ci-dessus était affichée à l'écran.

Cause et solution

La cause était l'ordre des arguments du contrôleur. Il semble que le BindingResult doit être défini immédiatement après l'objet Form à valider.

@PostMapping("/auth")
public String postLogin(@ModelAttribute @Validated LoginForm form, BindingResult result, Model model) {
    if (result.hasErrors()) {
        return "login";
    }
    User user = userService.login(form.getId(), form.getPassword());
    model.addAttribute("user", user);

    return "redirect:/menu";
}

Il doit être dans l'ordre de hoge (Form, BindingResult, Model) comme ceci.

À la fin

Il n'y a pas de journal des erreurs sur la console et c'est la première fois qu'une erreur se produit en raison de l'ordre des arguments. Je n'avais aucune idée de la nature du problème et il m'a fallu beaucoup de temps pour le résoudre.

De plus, comme je l'ai écrit au début, je ne suis pas habitué à ces sorties dans le premier post, donc si vous avez des erreurs ou des conseils, je vous serais reconnaissant de bien vouloir me le faire savoir.

Recommended Posts

La validation de printemps était importante dans l'ordre de Form et BindingResult
[Pour les débutants] DI ~ Les bases de DI et DI au printemps ~
Ordre de traitement dans le programme
Filtrer le résultat de BindingResult [Spring]
[Java] Obtenez les dates des derniers lundi et dimanche dans l'ordre
Formulaire qui reçoit la valeur de l'élément répétitif dans Spring MVC
[Order method] Définit l'ordre des données dans Rails
[Rails] Classement et pagination par J'aime
Installez le plug-in dans Eclipse
Utiliser le plugin Findbugs dans Eclipse
La validation de printemps était importante dans l'ordre de Form et BindingResult
Ordre de traitement dans le programme
Spring Autowired est écrit dans le constructeur
Entrée de la console en Java (comprendre le mécanisme)
[Order method] Définit l'ordre des données dans Rails
Afficher la tâche Gradle dans le projet Spring Boot
Spécifiez le codage des ressources statiques dans Spring Boot
Jusqu'à l'utilisation de Spring Data et JPA Part 2
Jusqu'à l'utilisation de Spring Data et JPA Part 1
Vérifiez le comportement de getOne, findById et des méthodes de requête avec Spring Boot + Spring Data JPA
[Spring Data JPA] La condition And peut-elle être utilisée dans la méthode de suppression implémentée automatiquement?
Traitement de branche avec la valeur de retour de RestTemplate et le code d'état de ResponseEntity dans Spring Boot
A été effectué dans l'année de base de la semaine calendaire Java
Mettez le fichier dans les propriétés de string avec la configuration spring xml
Contribué à Gradle et a été nommé dans la note de publication
[Rails] Où faire attention dans la description de la validation
Créer plus d'onglets et de fragments dans le fragment de BottomNavigationView
Validation du ressort et code d'erreur
Quand j'étais inquiet des méthodes statiques dans l'interface java, je suis arrivé à l'ordre d'interprétation des noms
Memo of JSUG Study Group 2018 Partie 2-Efforts pour les spécifications de travail à l'ère du printemps et de l'API-
Je veux connaître la méthode du contrôleur où l'exception a été levée dans le ExceptionHandler de Spring Boot
Obtenez une instance proxy du composant lui-même dans Spring Boot
Examinons la signification de "stream" et "collect" dans l'API Stream de Java.
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
[Spring Boot] Liste des règles de validation qui peuvent être utilisées dans le fichier de propriétés pour les messages d'erreur
Ordre d'évaluation de l'itinéraire dans Spark
Explication de l'ordre des itinéraires ferroviaires
[Rails] Différence de comportement entre delegate et has_many-through dans le cas de one-to-one-to-many
Utilisez Spring Mobile pour déterminer le type d'appareil des smartphones, tablettes et ordinateurs personnels
Spécifiez l'ordre dans lequel les fichiers de configuration et les classes sont chargés dans Java
L'histoire de l'oubli de fermer un fichier en Java et de l'échec
Étapes pour rendre Spring Boot capable de faire référence à la valeur dans le fichier de propriétés
Définissez le nombre de secondes d'avance et de retour rapides dans ExoPlayer
Confirmation et refactoring du flux de la requête au contrôleur dans [httpclient]
(Déterminez en 1 minute) Comment utiliser vide?, Vide? Et présent?
Ceci et cela de la mise en œuvre du jugement en temps réel des dates en Java
Comment modifier le nombre maximum et maximum de données POST dans Spark
Calculez le pourcentage de "bon", "normal" et "mauvais" dans le questionnaire à l'aide de SQL
Trouvez le maximum et le minimum des cinq nombres saisis en Java
[Rails] La cause de l'impossibilité de publier des messages était form_with
Afficher la structure tridimensionnelle de l'ADN et des protéines dans Ruby-dans le cas de GR.rb