[JAVA] Selbstgemachte Validierung mit Spring

Hintergrund

Notieren Sie sich die andere Validierungsmethode als das Kommentieren des Formulars (doppelte Überprüfung usw.). Dieses Mal verwenden wir Spring Validator anstelle von Bean Validation.

Methode

SessionForm


public class SessionForm {

    private CheckForm checkForm;
    //Fehlerausgabevariablen
    private String error1;

    private String error2;
    //Setter weglassen usw.

CheckValidation


@Component
                             //Schnittstellenimplementierung
public class CheckValidation implements Validator {
    //Injizieren, wenn der Helfer für die Prüfung verwendet wird
    @Autowired
    Helper helper;

    @Override
    public boolean supports(Class<?> clazz) {
        //Geben Sie das Formular ein, das Sie überprüfen möchten(Sitzung zugeschriebene Klasse)
        //isAssignableFrom enthält alle geerbten Klassen
        return SessionForm.class.isAssignableFrom(clazz);
    }

    @Override
    public void validate(Object target, Errors errors) {
        //Erstellen Sie die Zielklasse einmal
        SessionForm form = (SessionForm) target;
        //form.checkForm.~Sie können auch verschachtelte Elemente von verwenden
        if (Bedingter Ausdruck) {
                errors.rejectValue(
                       //Im Formular angegebene Variablen
                       "error1",
                       //Null, wenn die Nachricht nicht in einer anderen Datei definiert ist
                        null, 
                       "Nachricht, die Sie ausgeben möchten");
            }

        //Führen Sie eine weitere Überprüfung durch
        if (Bedingter Ausdruck) {
                errors.rejectValue(
                        "error2", 
                         null, 
                        "Nachricht, die Sie ausgeben möchten");
                }
}
          

Controller


@Controller
@SessionAttributes(names = "sessionForm")
public class ExampleController {
    //Zur Tasteneinstellung
    private static final String FORM_NAME = "sessionForm";

    //Injizieren Sie Ihre eigene Validierungsklasse
    @Autowired
    CheckValidation checkValidation;

    //Zu WebDataBinder hinzugefügt
    @InitBinder("sessionForm")
    public void initBinder(WebDataBinder binder) {
        binder.addValidators(checkValidation);
    }
    
    //Der an die Methode angehängte Modus fügt dem Modell vor dem Aufruf einen Platz hinzu
    @ModelAttribute(value = "sessionForm")
    public SessionForm sessionForm() {
        return new SessionForm();
    }

//a
@RequestMapping(path="Der Pfad, den Sie in die Umleitung eingegeben haben", method=RequestMethod.GET)
    public String putInformation(@ModelAttribute(FORM_NAME) SessionForm session, BindingResult result,ModelMap model) {

        String key = BindingResult.MODEL_KEY_PREFIX + FORM_NAME;
        //Wenn beim Umleiten ein Fehler im Modell vorliegt
        if(model.containsKey("errors")) {
            //Fehlerspeicherung im Kartenformat in dem in Schlüssel festgelegten Formular
            model.addAttribute(key, model.get("errors"));
            model.addAttribute("sessionForm" , session);
            return "JSP usw. möchten Sie wechseln";
        }
        //Andere weggelassen
}

//b
@RequestMapping(path="Eingabebestätigungsbildschirm usw.", method=RequestMethod.POST)
    public String confirmInfomation(@Validated SessionForm session, BindingResult result, Model model, RedirectAttributes ra)throws Exception {

            if(result.hasErrors()) {
            ra.addFlashAttribute("errors", result);
            //Zum Eingabebildschirm umleiten
            return "redirect:/{Zum Pfad des Controllers, den Sie aufrufen möchten}";
        }
        //Andere weggelassen
}

JSP


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

Memo

・ Erstellen Sie zunächst Fehlervariablen im vollständigen Formular. -Informationen werden in der Variablen in der variablen Datenklasse gespeichert.

Zusammenfassung

Dieses Mal habe ich es durch Ausprobieren erstellt, daher denke ich, dass es einen besseren Weg gibt, aber ich habe mir eine Notiz gemacht, weil es funktioniert hat. Ich konnte es mit den Informationen (Datum usw.) vergleichen, die von der DB in der Varidata-Klasse stammen, daher dachte ich, dass Varidata einen ziemlich hohen Freiheitsgrad hat. Wenn ich andere Varidata als Spring implementiere, dachte ich, ich würde Bedingungen mit Filtern schreiben.

Recommended Posts

Selbstgemachte Validierung mit Spring
Erhalten Sie Validierungsergebnisse mit Spring Boot
Formularklassenvalidierungstest mit Spring Boot
Validierung von JSON mit JSON-Schema
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Frühling mit Kotorin ―― 1. SPRING INITIALIZR
Mit Spring Boot herunterladen
Generieren Sie mit Spring Boot einen Barcode
Federvalidierung und Fehlercode
Hallo Welt mit Spring Boot
Java-Konfiguration mit Spring MVC
Prozessvalidierungsnachricht mit Decorator
Frühling mit Kotorin --- 8. Aufbewahrungsschicht
Beginnen Sie mit Spring Boot
Hallo Welt mit Spring Boot!
Feder mit Kotorin --6 Asynchrone Verarbeitung
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Feder mit Kotorin ―― 7. Serviceschicht
Anmeldefunktion mit Spring Security
Verwenden von Mapper mit Java (Spring)
Spring Boot beginnend mit Docker
Hallo Welt mit Spring Boot
Setzen Sie Cookies mit Spring Boot
Verwenden Sie Spring JDBC mit Spring Boot
Modul mit Spring Boot hinzufügen
Erste Schritte mit Spring Boot
API mit Spring + Vue.js verknüpfen
Erstellen Sie mit Spring Boot einen Mikrodienst
Frühlingstest zur Überprüfung einzelner Artikel
Mail mit Spring Boot verschicken
Ändern Sie die Spring Boot-Validierungsnachricht
Verwenden Sie die Standardauthentifizierung mit Spring Boot
Feder mit Kotorin --4 REST API Design
Implementierte Authentifizierungsfunktion mit Spring Security ②
gRPC auf Spring Boot mit grpc-spring-boot-Starter
Hot Deploy mit Spring Boot-Entwicklung
Spring Boot Programmierung mit VS Code
Bis "Hallo Welt" mit Spring Boot
Erstellen Sie eine Anfrage-App mit Spring Boot
Implementierte Authentifizierungsfunktion mit Spring Security ①
Implementieren Sie den Dateidownload mit Spring MVC
Oauth2-Authentifizierung mit Spring Cloud Gateway
Bean Validation mit Micronaut (Java) hinzufügen
Einfache Eingabeprüfung mit Bean Validation!
(Intellij) Hallo Welt mit Spring Boot
Google Cloud Platform mit Spring Boot 2.0.0
Ich habe GraphQL mit Spring Boot ausprobiert
[Java] LINE-Integration mit Spring Boot
[Frühling] Mehrere Bohnen automatisch verdrahtet. (Mit Bonus)
Beginnend mit Spring Boot 0. Verwenden Sie Spring CLI
Ich habe Flyway mit Spring Boot ausprobiert
Zertifizierung / Autorisierung mit Spring Security & Thymeleaf
Testen Sie den Spring Framework Controller mit Junit
Über Fehler bei der Implementierung der Federvalidierung
Die Nachrichtenkooperation begann mit Spring Boot
Verarbeitung beim Starten einer Anwendung mit Spring Boot
ODER suchen Sie mit der Spring Data Jpa-Spezifikation
Hallo Welt mit Eclipse + Spring Boot + Maven