[JAVA] [Einführung in Spring Boot] Überprüfung der Formularvalidierung

Zweck

Für diejenigen, die mit der Arbeit an Spring Quickstart Guide fertig sind, diejenigen, die angefangen haben, Spring Boot zu lernen, und diejenigen, die eine Überprüfung durchführen möchten

Wir werden mitteilen, was wir gelernt haben, indem wir tatsächlich am offiziellen Leitfaden Validating Form Input gearbeitet haben.

Das ausgefüllte Formular finden Sie hier.

Es gibt ein Formular zur Eingabe von Name und Alter. スクリーンショット 2020-07-09 14.05.32.png

Wenn die Senden-Taste mit einem ungültigen Wert gedrückt wird, wird eine Fehlermeldung angezeigt und スクリーンショット 2020-07-09 14.05.40.png

Wenn ein gültiger Wert eingegeben wird, implementieren wir ihn, damit Sie zu einem anderen Bildschirm wechseln können. スクリーンショット 2020-07-09 14.12.54.png

Die Entwicklungsumgebung und die Überprüfung sind wie folgt.

Entwicklungsumgebung


Betriebssystem: macOS Mojave Version 10.14.6
Texteditor: Visual Studio Code (im Folgenden VSCode)
Java: 11.0.2

Klicken Sie hier, um eine Übersicht über die Kurzanleitung zu erhalten. Klicken Sie hier, um eine Übersicht über das Erstellen eines RESTful-Webdiensts zu erhalten. Klicken Sie hier, um eine Übersicht über den Verbrauch eines RESTful-Webdienstes zu erhalten. Klicken Sie hier, um eine Übersicht über den Zugriff auf Daten mit JPA zu erhalten. Klicken Sie hier, um eine Übersicht über die Übermittlung des Bearbeitungsformulars zu erhalten

1. Starten Sie das Spring Boot Projekt!

Gehen Sie zunächst zu spring initializr.

  1. Klicken Sie auf die Schaltfläche ADD DEPENDENCIES und fügen Sie "Spring Web" und "Thymeleaf" hinzu. 2.Artifact, Name geändert in validating-form-input.
  2. Ändern Sie "Java" in "11".

Klicken Sie dann auf die Schaltfläche "GENERATE", um die Zip-Datei herunterzuladen.

スクリーンショット 2020-07-09 14.25.27.png

Extrahieren Sie die heruntergeladene Zip-Datei und Sie können loslegen.

2. Code hinzufügen!

Öffnen Sie den vorherigen Ordner mit VS Code. Wir empfehlen, das Java Extension Pack für Erweiterungen zu installieren. Es wird gesagt, dass Sie es installieren sollten.

スクリーンショット 2020-06-30 10.08.25.png

Lassen Sie uns PersonForm.java erstellen!

Erstellen Sie eine PersonForm.java-Datei in src / main / java / com / example / validatingforminput /.

スクリーンショット 2020-07-09 14.30.13.png

Fügen Sie den Code hinzu, der sich auf die Formel bezieht.

PersonForm.java


package com.example.validatingforminput;

import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;

public class PersonForm {

  @NotNull
  @Size(min=2, max=30)
  private String name;

  @NotNull
  @Min(18)
  private Integer age;

  public String getName() {
    return this.name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public Integer getAge() {
    return age;
  }

  public void setAge(Integer age) {
    this.age = age;
  }

  public String toString() {
    return "Person(Name: " + this.name + ", Age: " + this.age + ")";
  }
}

Wir werden uns eingehender mit dem hinzugefügten Code befassen.

@ NotNull und @ Size

PersonForm.java


@NotNull
@Size(min=2, max=30)
private String name;

Zum Zeitpunkt der Deklaration werden der Variablen für den Namen des String-Typs zwei Validierungsanmerkungen hinzugefügt.

@ NotNull erlaubt nicht ** null **. Bitte beachten Sie, dass Nullen nicht zulässig sind, Leerzeichen und Leerzeichen jedoch zulässig sind.

@ Size überprüft, ob ** min oder mehr ** und ** max oder weniger ** in () angegeben sind. Diesmal ist es "@Size (min = 2, max = 30)", sodass ein Fehler auftritt, wenn es nicht 2 oder mehr und 30 oder weniger ist.

@Min

PersonForm.java


@NotNull
@Min(18)
private Integer age;

Beim Deklarieren einer Altersvariablen vom Typ Integer werden zwei Validierungsanmerkungen hinzugefügt. (Eines ist "@ NotNull" oben erwähnt)

@ Min wird überprüft, ob es kleiner als der in () beschriebene Wert ist. Diesmal ist es "@ Min (18)", sodass weniger als 18 zu einem Fehler führen.

③ Getter / Setter, toString-Methode

PersonForm.java


public String getName() {
  return this.name;
}

public void setName(String name) {
  this.name = name;
}

public Integer getAge() {
  return age;
}

public void setAge(Integer age) {
  this.age = age;
}

public String toString() {
  return "Person(Name: " + this.name + ", Age: " + this.age + ")";
}

Es definiert eine Getter / Setter-Methode zum Abrufen und Ändern der Werte der Variablen Name und Alter. Außerdem wird eine toString-Methode zum Anzeigen von Name und Alter als Zeichenfolgen definiert. (Ich glaube nicht, dass ich es dieses Mal benutze, aber ist es zum Debuggen?)

Fügen wir der pom.xml eine Validierungsabhängigkeit hinzu!

Obwohl es im offiziellen Handbuch nicht erwähnt wurde, wenn Spring Boot 2.3 oder höher, Import javax.validation.constraints.〇〇 von PersonForm.java führt zu einem Fehler. (Spring Boot2.3 Relealse Notes)

Fügen Sie Abhängigkeiten Folgendes hinzu.

pom.xml


<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-validation</artifactId>
</dependency>

スクリーンショット_2020-07-09_15_38_58.png

Lassen Sie uns WebController.java erstellen!

Erstellen Sie eine WebController.java-Datei in src / main / java / com / example / validatingforminput /.

スクリーンショット 2020-07-09 15.41.24.png

Fügen Sie den Code hinzu, der sich auf die Formel bezieht.

WebController.java


package com.example.validatingforminput;

import javax.validation.Valid;

import org.springframework.stereotype.Controller;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.servlet.config.annotation.ViewControllerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;


@Controller
public class WebController implements WebMvcConfigurer {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/results").setViewName("results");
  }

  @GetMapping("/")
  public String showForm(PersonForm personForm) {
    return "form";
  }

  @PostMapping("/")
  public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) {

    if (bindingResult.hasErrors()) {
      return "form";
    }

    return "redirect:/results";
  }
}

Wir werden uns eingehender mit dem hinzugefügten Code befassen.

① WebMvcConfigurer-Schnittstelle und addViewControllers-Methode

WebController.java


@Controller
public class WebController implements WebMvcConfigurer {

  @Override
  public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/results").setViewName("results");
  }

 //Folgendes wird weggelassen
}

Implementiert die WebMvcConfigurer-Schnittstelle und überschreibt die addViewControllers-Methode.

Es wird interpretiert, dass die URL "http: // localhost: 8080 / results" so eingestellt ist, dass sie auf die Vorlage ** results.html ** verweist. Es scheint, dass die URL und die Vorlage zugeordnet sind. Die Implementierung von results.html erfolgt später.

② showForm-Methode

WebController.java


@GetMapping("/")
public String showForm(PersonForm personForm) {
  return "form";
}

@ GetMapping ist eine Anmerkung zum Aufrufen der showForm-Methode, wenn eine GET-Anforderung unter http: // localhost: 8080 / vorliegt. Ich erhalte eine PersonForm als Argument. Sie können PersonForm mit dem Formularattribut "form.html" verknüpfen, dem Rückgabewert der Methode. Die Implementierung von form.html erfolgt später.

③ checkPersonInfo-Methode

WebController.java


@PostMapping("/")
public String checkPersonInfo(@Valid PersonForm personForm, BindingResult bindingResult) {

  if (bindingResult.hasErrors()) {
    return "form";
  }

  return "redirect:/results";
}

@ PostMapping ist eine Anmerkung zum Aufrufen der checkPersonInfo-Methode, wenn eine POST-Anforderung unter http: // localhost: 8080 / vorliegt. Das erste Argument, "@Valid PersonForm personForm", validiert die Eingabedaten. Das zweite Argument, "BindingResult bindingResult", ist eine Anmerkung zum Speichern der Eingabedaten und des Validierungsergebnisses (ob ein Fehler vorliegt).

Die if-Anweisung mit "bindingResult.hasErrors ()" sucht nach Fehlern. Wenn ein Fehler auftritt, zeichnen Sie form.html mit der Fehlermeldung und dem eingegebenen Wert neu.

Wenn keine Fehler vorliegen, werden Sie zu "http: // localhost: 8080 / results" weitergeleitet.

Lassen Sie uns form.html erstellen!

Erstellen Sie eine form.html-Datei in src / main / resources / templates /.

スクリーンショット 2020-07-10 10.18.06.png

Fügen Sie den Code hinzu, der sich auf die Formel bezieht.

form.html


<html xmlns:th="http://www.thymeleaf.org">
  <body>
      <form action="#" th:action="@{/}" th:object="${personForm}" method="post">
        <table>
          <tr>
            <td>Name:</td>
            <td><input type="text" th:field="*{name}" /></td>
            <td th:if="${#fields.hasErrors('name')}" th:errors="*{name}">Name Error</td>
          </tr>
          <tr>
            <td>Age:</td>
            <td><input type="text" th:field="*{age}" /></td>
            <td th:if="${#fields.hasErrors('age')}" th:errors="*{age}">Age Error</td>
          </tr>
          <tr>
            <td><button type="submit">Submit</button></td>
          </tr>
        </table>
      </form>
  </body>
</html>

Es ist ein Formularbildschirm zur Eingabe von Name und Alter.

Wir werden uns eingehender mit der Beschreibung von Thymeleaf im hinzugefügten Code befassen.

thymeleaf ist eine Template-Engine, die von springboot verarbeitet werden kann. Beschrieben als th: 〇〇. [Thymeleaf-Tutorial] in japanischer Sprache (https://www.thymeleaf.org/doc/tutorials/3.0/usingthymeleaf_ja.html#thymeleaf%E3%81%AE%E7%B4%B9%E4%BB%) Es gibt auch 8B)!

th:action

Ersetzt den Inhalt des Aktionsattributs des Formular-Tags. Die Beschreibungsmethode lautet th: action =" @ {} ". Da method = "post" ist, wird die checkPersonInfo-Methode von WebController aufgerufen, wenn die Submit-Schaltfläche gedrückt wird.

th:object

Das Objekt wird durch th: object angegeben. Auf diese Weise können Sie auf Variablen in Objekten wie * {name} anstelle von personForm.name verweisen.

th:field

Schreiben Sie th: field =" * {Variablenname} ", um die Variablen in dem durch th: object angegebenen Objekt anzuzeigen. Da es in der PersonForm-Klasse Namen und Alter gibt, lautet diesmal "th: field =" * {name} "," th: field = "* {age}" ". Außerdem ist der in th: field =" * {Variablenname} " beschriebene Variablenname das ID-Attribut und das Namensattribut der Eingabe.

th:if

Schreiben Sie th: if = condition. Wenn true, werden das Tag und die untergeordneten Elemente angezeigt. Diese Bedingung ist erfüllt, wenn ein Fehler vorliegt.

th:errors

Schreiben Sie th: error =" * {Variablenname} ". Bei einem Fehler wird eine Fehlermeldung angezeigt. Es scheint, als hätten Sie einen Bereich zum Anzeigen von Fehlermeldungen gesichert, indem Sie mit th: if und th: error nach Fehlern gesucht haben.

Lassen Sie uns results.html erstellen!

Erstellen Sie eine Datei results.html in src / main / resources / templates /.

スクリーンショット 2020-07-10 11.11.36.png

Fügen Sie den Code hinzu, der sich auf die Formel bezieht.

results.html


<html>
  <body>
    Congratulations! You are old enough to sign up for this site.
  </body>
</html>

Wenn auf dem Formularbildschirm kein ungültiger Wert eingegeben wird, wechselt der Bildschirm zu diesem Bildschirm.

3. Lass es uns laufen!

Nachdem die Anwendung nun ausgeführt werden kann, überprüfen wir sie.

Geben Sie den folgenden Befehl in das Terminal ein und drücken Sie die Eingabetaste.

Terminal


$ ./mvnw spring-boot:run

Wenn Sie dann auf "http: // localhost: 8080 /" zugreifen, sollte der folgende Formularbildschirm angezeigt werden. (Form.html wird angezeigt)

スクリーンショット 2020-07-09 14.05.32.png

** Geben Sie ein Zeichen für den Namen und eine Zahl unter 18 für das Alter ein und klicken Sie auf die Schaltfläche Senden, um eine Fehlermeldung anzuzeigen. ** ** **

スクリーンショット 2020-07-10 13.38.34.png

スクリーンショット 2020-07-10 13.38.46.png

** Wenn Sie auf die Schaltfläche "Senden" klicken, ohne das Alter einzugeben, wird eine Fehlermeldung angezeigt. ** ** **

スクリーンショット 2020-07-10 13.41.09.png

** Geben Sie 2 oder mehr Zeichen für den Namen und 18 oder mehr für das Alter ein und klicken Sie auf die Schaltfläche Senden, um den Ergebnisbildschirm (result.html) anzuzeigen. ** ** **

スクリーンショット 2020-07-10 13.45.01.png

スクリーンショット 2020-07-10 13.45.07.png

Danke für deine harte Arbeit! erledigt!

Referenzseite

** Überprüfung des Eingabewerts mit Spring Boot ** ** Wenn es sich um einen Controller handelt, der nur den Ansichtsnamen zurückgibt, benötigen Sie keinen separaten Controller! ** ** Validierungs- und Fehlermeldung **

Recommended Posts

[Einführung in Spring Boot] Überprüfung der Formularvalidierung
Einführung in Spring Boot ~ ~ DI ~
Einführung in Spring Boot ② ~ AOP ~
Einführung in Spring Boot Teil 1
[Einführung in Spring Boot] Senden Sie ein Formular mit thymeleaf
Spring Boot Form
Formularklassenvalidierungstest mit Spring Boot
Einführung in Spring Boot + In-Memory Data Grid
[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Versuchen Sie Spring Boot von 0 bis 100.
Einführung in Ratpack (7) - Guice & Spring
Ändern Sie die Spring Boot-Validierungsnachricht
So stellen Sie Spring Boot + PostgreSQL ein
Erhalten Sie Validierungsergebnisse mit Spring Boot
Verwendung von ModelMapper (Spring Boot)
Rüsten Sie den Federstiefel von der 1.5-Serie auf die 2.0-Serie auf
Einführung in Spring Boot x Offene API ~ Offene API, erstellt mit Generationslückenmuster ~
Die Geschichte des Übergangs von Spring Boot 1.5 zu 2.1
Änderungen bei der Migration von Spring Boot 1.5 auf Spring Boot 2.0
Änderungen bei der Migration von Spring Boot 2.0 zu Spring Boot 2.2
So teilen Sie eine Spring Boot-Nachrichtendatei
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
[Spring Boot Actuator] So registrieren Sie Ihren eigenen Integritätsprüfungsprozess manuell
Einführung in Ruby 2
Bucheinführung: Spring Boot Empfohlenes Nachschlagewerk für Anfänger!
Spring Fox ① Einführung
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
So verkleinern Sie das Spring Boot Docker-Image
Verwendung von Spring Boot-Sitzungsattributen (@SessionAttributes)
Die Geschichte der Erhöhung der Spring Boot 1.5-Serie auf die 2.1-Serie
Lassen Sie uns das Gefühl von Spring Boot + Swagger 2.0 überprüfen
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
Fordern Sie Spring Boot heraus
Spring Data REST HAL Browser bestätigt den Spring REST-Vorgang
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Einführung in web3j
Einführung in Micronaut 1 ~ Einführung ~
[Java] Einführung in Java
Einführung in die Migration
So binden Sie mit einer Eigenschaftendatei in Spring Boot
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
Ich wollte Spring Boot in einem Multiprojekt gradle
Einführung in Java
Wenden Sie Twitter Bootstrap 4 mithilfe von Webjars auf Spring Boot 2 an
Spring Boot Denken Sie daran
gae + frühlingsstiefel
Einführung in Doma
[Spring Boot] So verweisen Sie auf die Eigenschaftendatei
Spring Boot - So stellen Sie das Sitzungszeitlimit ein
Pläne zur Unterstützung von JDK 11 für Eclipse und Spring Boot
So stellen Sie Spring Boot Dependency Injection (DI) ein
So schreiben Sie einen Komponententest für Spring Boot 2
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
Wenn Sie die Spring Boot + Thymeleaf-Verarbeitung trennen möchten
Ein Memorandum über die Sucht nach Spring Boot2 x Doma2
05. Ich habe versucht, die Quelle von Spring Boot zu löschen