[JAVA] Validation personnalisée avec Spring

Contexte

Notez la méthode de validation autre que l'annotation du formulaire (double vérification, etc.). Cette fois, nous utiliserons Spring Validator au lieu de Bean Validation.

Méthode

SessionForm


public class SessionForm {

    private CheckForm checkForm;
    //Variables de sortie d'erreur
    private String error1;

    private String error2;
    //Omettre les setters, etc.

CheckValidation


@Component
                             //Implémentation de l'interface
public class CheckValidation implements Validator {
    //Injecter lors de l'utilisation de l'assistant pour Check
    @Autowired
    Helper helper;

    @Override
    public boolean supports(Class<?> clazz) {
        //Entrez le formulaire que vous souhaitez vérifier(Classe attribuée à la session)
        //isAssignableFrom inclut toutes les classes héritées
        return SessionForm.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        //Créer la classe cible une fois
        SessionForm form = (SessionForm) target;
        //form.checkForm.~Vous pouvez également utiliser des éléments imbriqués par
        if (Expression conditionnelle) {
                errors.rejectValue(
                       //Variables spécifiées dans le formulaire
                       "error1",
                       //Nul si le message n'est pas défini dans un autre fichier
                        null, 
                       "Message que vous souhaitez sortir");
            }

        //Faites une autre vérification
        if (Expression conditionnelle) {
                errors.rejectValue(
                        "error2", 
                         null, 
                        "Message que vous souhaitez sortir");
                }
}
          

Controller


@Controller
@SessionAttributes(names = "sessionForm")
public class ExampleController {
    //Pour le réglage des touches
    private static final String FORM_NAME = "sessionForm";

    //Injectez votre propre classe de validation
    @Autowired
    CheckValidation checkValidation;

    //Ajouté à WebDataBinder
    @InitBinder("sessionForm")
    public void initBinder(WebDataBinder binder) {
        binder.addValidators(checkValidation);
    }
    
    //Le mode attaché à la méthode ajoute une place au modèle avant d'appeler
    @ModelAttribute(value = "sessionForm")
    public SessionForm sessionForm() {
        return new SessionForm();
    }

//a
@RequestMapping(path="Le chemin que vous avez mis dans la redirection", method=RequestMethod.GET)
    public String putInformation(@ModelAttribute(FORM_NAME) SessionForm session, BindingResult result,ModelMap model) {

        String key = BindingResult.MODEL_KEY_PREFIX + FORM_NAME;
        //S'il y a une erreur dans le modèle lors de la redirection
        if(model.containsKey("errors")) {
            //Stockage des erreurs au format carte sous la forme définie dans Key
            model.addAttribute(key, model.get("errors"));
            model.addAttribute("sessionForm" , session);
            return "JSP, etc. que vous souhaitez effectuer la transition";
        }
        //Autres omis
}

//b
@RequestMapping(path="Écran de confirmation d'entrée, etc.", method=RequestMethod.POST)
    public String confirmInfomation(@Validated SessionForm session, BindingResult result, Model model, RedirectAttributes ra)throws Exception {

            if(result.hasErrors()) {
            ra.addFlashAttribute("errors", result);
            //Rediriger vers l'écran de saisie
            return "redirect:/{Vers le chemin du contrôleur que vous souhaitez appeler}";
        }
        //Autres omis
}

JSP


<form:errors path="error1" />
<form:errors path="error2" />

Note

・ Tout d'abord, créez des variables d'erreur sur le formulaire complet. -Les informations sont stockées dans la variable dans la classe de données variables. -En ajoutant un validateur à WebDataBinder sur le contrôleur, les données variables ajoutées après l'appel de BeanValidation sont appelées et la vérification auto-effectuée est effectuée. N'oubliez pas Autowired. -S'il y a une erreur dans BindingResult, redirigez tout en conservant ces informations (vérifiez la pièce avant de passer à l'écran de confirmation d'entrée, etc.). Le flux de la méthode est a → b → a. -Branch en fonction de la présence ou de l'absence d'une erreur dans la méthode de destination de la redirection, et s'il y en a, stockez les informations d'erreur dans le modèle et partagez-les avec le JSP. -Utilisez les erreurs dans la balise de formulaire dans JSP pour faire correspondre le chemin et les variables de formulaire de session et générer un message d'erreur.

Résumé

Cette fois, je l'ai créé par essais et erreurs, donc je pense qu'il existe un meilleur moyen, mais j'ai fait une note parce que cela fonctionnait. J'ai pu le comparer avec les informations (date, etc.) apportées par la base de données dans la classe Varidata, j'ai donc pensé que Varidata avait un degré de liberté assez élevé. Si j'implémente Varidata autre que Spring, je pensais que j'écrirais des conditions en utilisant des filtres.

Recommended Posts

Validation personnalisée avec Spring
Obtenez des résultats de validation avec Spring Boot
Test de validation de classe de formulaire avec Spring Boot
Validation de JSON avec le schéma JSON
[Java] Article pour ajouter une validation avec Spring Boot 2.3.1.
Printemps avec Kotorin ―― 1. INITIALISATION PRINTEMPS
Télécharger avec Spring Boot
Générer un code à barres avec Spring Boot
Validation du ressort et code d'erreur
Hello World avec Spring Boot
Configuration Java avec Spring MVC
Message de validation de processus avec Decorator
Spring with Kotorin --- 8. Couche de référentiel
Démarrez avec Spring Boot
Bonjour tout le monde avec Spring Boot!
Spring avec Kotorin --6 Traitement asynchrone
Exécutez LIFF avec Spring Boot
Connexion SNS avec Spring Boot
Ressort avec Kotorin ―― 7. Couche de service
Fonction de connexion avec Spring Security
Utilisation de Mapper avec Java (Spring)
Spring Boot à partir de Docker
Hello World avec Spring Boot
Définir des cookies avec Spring Boot
Utiliser Spring JDBC avec Spring Boot
Ajouter un module avec Spring Boot
Premiers pas avec Spring Boot
Lier l'API avec Spring + Vue.js
Créer un micro service avec Spring Boot
Test de validation d'élément unique de printemps
Envoyer du courrier avec Spring Boot
Modifier le message de validation Spring Boot
Utiliser l'authentification de base avec Spring Boot
Spring avec Kotorin - 4 Conception d'API REST
Mise en œuvre de la fonction d'authentification avec Spring Security ②
gRPC sur Spring Boot avec grpc-spring-boot-starter
Déploiement à chaud avec le développement Spring Boot
Programmation Spring Boot avec VS Code
Jusqu'à "Hello World" avec Spring Boot
Créer une application d'enquête avec Spring Boot
Mise en œuvre de la fonction d'authentification avec Spring Security ①
Implémenter le téléchargement de fichiers avec Spring MVC
Authentification Oauth2 avec Spring Cloud Gateway
Ajouter une validation de bean avec Micronaut (Java)
Contrôle d'entrée facile avec Bean Validation!
(Intellij) Hello World avec Spring Boot
Google Cloud Platform avec Spring Boot 2.0.0
J'ai essayé GraphQL avec Spring Boot
[Java] Intégration LINE avec Spring Boot
[Spring] Plusieurs beans auto-câblés. (Avec bonus)
À partir de Spring Boot 0. Utilisez Spring CLI
J'ai essayé Flyway avec Spring Boot
Certification / autorisation avec Spring Security & Thymeleaf
Contrôleur de cadre de test Spring avec Junit
À propos des erreurs lors de la mise en œuvre de la validation du printemps
La coopération des messages a commencé avec Spring Boot
Traitement lors du démarrage d'une application avec Spring Boot
OU rechercher avec la spécification Spring Data Jpa
Hello World avec Eclipse + Spring Boot + Maven