[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.

Einführung

Hallo! Dies ist die 4. Serie, die von Grund auf mit Java spielt. Ich habe es gerade genannt.

Klicken Sie hier für Artikel bis zum letzten Mal ↓

  1. Erstellen einer STS-Umgebung auf einem Mac
  2. Hallo Welt mit Spring Boot
  3. Echoanwendung mit Spring Boot erstellen

Dieses Mal möchte ich der Echo-Anwendung, die ich zuletzt erstellt habe, eine Validierung hinzufügen.

もょもと.gif

Derzeit können Zeichenfolgen, Zahlen und umgebungsabhängige Zeichen in einer beliebigen Anzahl von Zeichen eingegeben werden. Wenn Sie also ein Phantomdokument senden, wird die Anzeige wie unten gezeigt beschädigt.

スクリーンショット 2020-07-21 0.26.28.png

erschrocken. Wenn Hatena im Namen aufgereiht ist, entsteht eine störende Atmosphäre. Ist es verstümmelt? Ich mag die Tatsache nicht, dass Zero die Bildschirmbreite durchbrochen hat.

Daher werde ich dieses Mal versuchen, die folgenden Anforderungen zu überprüfen, z. B. den Benutzernamen eines Dienstes. Im Fehlerfall Es handelt sich um ein Bild, bei dem eine Fehlermeldung auf demselben Bildschirm angezeigt wird.

Das fertige Produkt hat die folgende Form. (Die Hintergrundfarbe wurde in eine augenschonende Farbe geändert.)

画面収録 2020-07-21 23.39.15.mov.gif

Nutzungsumgebung und Version

Implementieren Sie die Validierung mit Anmerkungen in der Formularklasse

Die folgenden Anmerkungen wurden der Formularklasse hinzugefügt.

-- @ NotBlank: Sie können überprüfen, ob es nicht null oder leer ist [^ 1] -- @ Size: Sie können die Minimal- und Maximalwerte mit dem Attribut min oder max angeben. -- @ Pattern: Sie können die Musterzeichenfolge des regulären Ausdrucks mit dem Attributwert regexp angeben. Diesmal habe ich einen regulären Ausdruck verwendet, der nur alphanumerische Zeichen mit halber Breite zulässt

[^ 1]: Verwenden Sie @NotNull, um nur null zu überprüfen

EchoForm.java


package com.example.form;

import java.io.Serializable;

import javax.validation.constraints.Pattern;
import javax.validation.constraints.Size;

import org.hibernate.validator.constraints.NotBlank;

public class EchoForm implements Serializable {
    private static final long serialVersionUID = 1L;
    @NotBlank
    @Size(min = 4)
    @Pattern(regexp = "[a-zA-Z0-9]*") //Muss alphanumerisch sein
    private String name;

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

    public String getName() {
        return name;
    }
}

Fügen Sie im Fehlerfall einen Zweig zur Controller-Klasse hinzu

Schreiben Sie nur die modifizierte Echo-Methode. Es gibt zwei Änderungen unten.

EchoController.java


@RequestMapping(value = "echo", method = RequestMethod.POST)
	public String echo(@Validated EchoForm echoForm, BindingResult result, Model model) {
		if (result.hasErrors() ) {
			model.addAttribute("name", echoForm.getName());
			return "index";
		}
		model.addAttribute("name", echoForm.getName());
		return "echo";
	}

Fügen Sie im Fehlerfall Text zu index.html hinzu

Ich möchte die Fehlermeldung wie unten gezeigt nur dann rot anzeigen, wenn ein Fehler auftritt ... Dies kann mit Frühling gemacht werden!

スクリーンショット 2020-07-21 23.26.59.png

Da wir das Formularobjekt bereits beim letzten Mal gebunden haben, können wir die Fehlerinformationen von echoForm abrufen und in Thymeleaf einfügen, um HTML zu erstellen. Der Frühling ist unglaublich. Thymeleaf ist unglaublich.

Es wird nur das Formteil beschrieben. An der von span umgebenen Stelle wird die Fehlermeldung nur angezeigt, wenn das Objekt fehlerhaft ist [^ 2]. Da die Eigenschaften des Formularobjekts im Attribut th: Errors festgelegt sind, werden nur Fehlermeldungen für die angegebenen Eigenschaften angezeigt. Wenn mehrere Fehlermeldungen vorliegen, wird automatisch "
" eingegeben. Vielen Dank.

[^ 2]: Ich habe auf die Implementierung von [dieser Seite] verwiesen (https://takeda-san.hatenablog.com/entry/2018/01/18/224244).

index.html


<form th:object="${echoForm}" th:action="@{/echo}" method="POST">
        <div>Bitte geben Sie Ihren Benutzernamen ein</div>
        <div>(4 oder mehr alphanumerische Zeichen halber Breite)</div>
        <div>
        	<input type="text" th:field="*{name}" /> 
        	<button>ich werde schicken</button>
        </div>
        <span th:if="${#fields.hasErrors('name')}" th:errors="*{name}" style="color: red"></span>
</form>

Japanische Lokalisierung von Fehlerformulierungen

Wenn Sie die Implementierung bisher ausführen, ist die Fehlermeldung die Standardmeldung (Englisch) der Anmerkung. Der Fehler lautet also wie folgt.

スクリーンショット 2020-07-21 23.52.09.png

Ich mag das nicht ein wenig ... Das Obige kann immer noch mit einer modischen Fehlermeldung ❤️ übergeben werden, aber die Größenzahl ist für den Benutzer bedeutungslos ... Beheben wir dies auf eine japanische Fehlermeldung!

Es erscheint wünschenswert, Bean Validation-Fehlermeldungen von Spring MVC in der Eigenschaftendatei zu definieren. Es scheint mehrere Methoden zu geben, aber ich habe mich dafür entschieden, weil es leicht zu verstehen war, wie ValidationMessages.properties direkt unter dem Klassenpfad erstellt wird.

Erstellen Sie eine neue ValidationMessages.properties unter Ressourcen.

スクリーンショット 2020-07-22 0.29.58.png

Der Inhalt ist eine einfache Implementierung, die die Nachricht der verwendeten Anmerkung einfach neu schreibt.

ValidationMessages.properties


org.hibernate.validator.constraints.NotBlank.message=Eingabe ist erforderlich.
javax.validation.constraints.Size.message=Muss mindestens 4 Zeichen lang sein.
javax.validation.constraints.Pattern.message=Es sind nur alphanumerische Zeichen halber Breite gültig.

Übrigens, als ich das Obige gerade in ValidationMessages.properties eingefügt habe, wurde es automatisch wie folgt, indem ich einfach Japanisch eingab und die Eingabetaste drückte ... Da die Standard-Bean of Spring Boot nicht UTF-8 ist, Multibyte Es scheint, dass die Charaktere verstümmelt sind.

ValidationMessages.properties


org.hibernate.validator.constraints.NotBlank.message=\u5165\u529B\u5FC5\u9808\u3067\u3059\u3002
javax.validation.constraints.Size.message=4\u6587\u5B57\u4EE5\u4E0A\u3067\u306A\u304F\u3066\u306F\u3044\u3051\u307E\u305B\u3093\u3002
javax.validation.constraints.Pattern.message=\u534A\u89D2\u82F1\u6570\u306E\u307F\u6709\u52B9\u3067\u3059\u3002

Wie im Kommentarbereich von Qiita hier erwähnt, möglicherweise, weil ich auch ein Spring 2-System und Java 11 oder höher bin, UTF in den Dateieigenschaften Wenn ich es auf -8 gesetzt habe, hat es in der Anwendung gut funktioniert. Klicken Sie einfach mit der rechten Maustaste auf Datei> Eigenschaften> Ressource und ändern Sie die Codierung der Textdatei von Standard auf UTF-8.

スクリーンショット 2020-07-22 0.58.50.png

Wenn ich jetzt versuche, die Datei zu speichern, wird die folgende Warnung angezeigt, die jedoch mit "Als UTF-8 speichern" einwandfrei funktioniert hat.

スクリーンショット 2020-07-22 0.50.06.png

Jetzt haben Sie eine japanische Nachricht wie diese!

スクリーンショット 2020-07-22 0.41.48.png

abschließend

Dieses Mal hatte ich ein kleines Problem mit der Thymeleaf-Notation des Textadditionsteils zum Zeitpunkt des Fehlers und der japanischen Lokalisierung von ValidationMessages.properties! Die diesmal eingeführte Methode ist verdächtig, wenn es sich um ein Spring 1-System handelt. Überprüfen Sie sie daher gegebenenfalls.

Danke fürs Lesen!

Recommended Posts

[Java] Artikel zum Hinzufügen einer Validierung mit Spring Boot 2.3.1.
Erhalten Sie Validierungsergebnisse mit Spring Boot
Bean Validation mit Micronaut (Java) hinzufügen
[Java] LINE-Integration mit Spring Boot
[Einführung in Spring Boot] Überprüfung der Formularvalidierung
Formularklassenvalidierungstest mit Spring Boot
Fügen Sie Frühlingsstiefel und Gradle zur Sonnenfinsternis hinzu
Verwendung von MyBatis2 (iBatis) mit Spring Boot 1.4 (Spring 4)
Verwendung des eingebauten h2db mit Federstiefel
Versuchen Sie, die Anmeldefunktion mit Spring Boot zu implementieren
So fügen Sie in Spring Boot einen Klassenpfad hinzu
Selbstgemachte Validierung mit Spring
Versuchen Sie, die Migration mit Spring Boot Flyway zu automatisieren
Ich wollte Spring Boot in einem Multiprojekt gradle
[Einführung in Spring Boot] Authentifizierungsfunktion mit Spring Security
Mit Spring Boot herunterladen
Einstellungen für die Verbindung zu MySQL mit Spring Boot + Spring JDBC
[Java] [Spring Boot] Geben Sie das Laufzeitprofil an - Spring Boot beginnend mit NetBeans
Ordnen Sie DTO automatisch Entitäten mit der Spring Boot-API zu
[Java] So lassen Sie die Federkonstruktorinjektion mit Lombok weg
[JUnit 5] Schreiben Sie einen Validierungstest mit Spring Boot! [Parametrisierungstest]
Booten nach Umgebung mit Spring Boot of Maven
Versuch, SSR Vue.js mit Spring Boot und GraalJS zu verwenden
Versuchen Sie Spring Boot von 0 bis 100.
Generieren Sie mit Spring Boot einen Barcode
Hallo Welt mit Spring Boot
Java-Konfiguration mit Spring MVC
Implementieren Sie GraphQL mit Spring Boot
Java zum Spielen mit Function
Beginnen Sie mit Spring Boot
Führen Sie LIFF mit Spring Boot aus
SNS-Login mit Spring Boot
Einführung in Spring Boot ~ ~ DI ~
Datei-Upload mit Spring Boot
Spring Boot beginnt mit dem Kopieren
Einführung in Spring Boot ② ~ AOP ~
CICS-Java-Anwendung ausführen- (4) Spring Boot-App
Stellen Sie mit Java eine Verbindung zur Datenbank her
Stellen Sie mit Java eine Verbindung zu MySQL 8 her
Verwenden von Mapper mit Java (Spring)
Hallo Welt mit Spring Boot
Erste Schritte mit Spring Boot
Einführung in Spring Boot Teil 1
[Java] [Spring] Spring Boot 1.4-> 1.2 Downgrade Hinweis
Erstellen Sie mit Spring Boot einen Mikrodienst
Mail mit Spring Boot verschicken
Ändern Sie die Spring Boot-Validierungsnachricht
[Java / Kotlin] Escape-Verarbeitung (Bereinigung) für HTML5 mit Unbescape [Spring Boot]
Behandeln Sie die Java 8-Datums- und Uhrzeit-API mit Thymeleaf mit Spring Boot
[Java] Stellen Sie die Spring Boot-Anwendung für den Azure App Service bereit
Schneiden Sie SQL in die Eigenschaftendatei mit jdbcTemplate von Spring Boot aus
Aufrufen und Verwenden der API in Java (Spring Boot)
Stellen Sie mit spring boot + spring jpa eine Verbindung zur Datenbank her und führen Sie die CRUD-Operation durch
Fluss bis zur Ausgabe von Tabellendaten, die mit Spring Boot angezeigt werden sollen
Domänengesteuerte Entwicklung mit Java und Spring Boot-Layer und Modulabteilung
Ich habe versucht, mit Swagger mit Spring Boot zu beginnen
[Java] Beispielprojekt zum Entwickeln von Webanwendungen mit Spring Boot
Java mit Ramen lernen [Teil 1]
Erstellen Sie eine App mit Spring Boot 2