In den Serien (SpringMVC Learning Series (6) Datenüberprüfung) und (SpringMVC Learning Series (6) Datenüberprüfung) haben wir gezeigt, wie man Daten bindet. Wie kann man nach dem Binden der Daten die Richtigkeit der erhaltenen Daten sicherstellen? Darüber werden wir in diesem Artikel sprechen —> Datenvalidierung.
Hier verwenden wir den Hibernate-Validator zur Überprüfung. Der Hibernate-Validator implementiert das JSR-SpringMVC Learning Series (6) Datenüberprüfung0SpringMVC Learning Series (6) Datenüberprüfung-Verifizierungsframework und unterstützt die Überprüfung des Anmerkungsstils. Zuerst müssen wir zu //m.sbmmt.com/ gehen, um das erforderliche JAR-Paket herunterzuladen. Hier verwenden wir SpringMVC Learning Series (6) Datenüberprüfung.SpringMVC Learning Series (6) Datenüberprüfung.SpringMVC Learning Series (6) Datenüberprüfung.Final als Demonstration, hibernate-validator-SpringMVC Learning Series (6) Datenüberprüfung.SpringMVC Learning Series (6) Datenüberprüfung.SpringMVC Learning Series (6) Datenüberprüfung.Final.jar und jboss-logging-SpringMVC Learning Series (6) Datenüberprüfung.SpringMVC Learning Series (6) Datenüberprüfung Die drei Pakete .0.jar und validation-api-SpringMVC Learning Series (6) Datenüberprüfung.0.0.GA.jar werden dem Projekt hinzugefügt.
Konfigurieren Sie die Datei springservlet-config.xml im vorherigen Projekt wie folgt:
<!-- 默认的注解映射的支持 --> <annotation-driven></annotation-driven> <bean> <property></property> <!--不设置则默认为classpath下的 ValidationMessages.properties --> <property></property> </bean> <bean></bean> <bean> <property></property> <property></property> <property learning series daten></property> </bean>
wobei Eigenschaft Name="Basisname" Wert="classpath:validatemessages"/>中Der classpath:validatemessages ist die Datei, in der sich die Anmerkungsüberprüfungsnachricht befindet, und wir müssen sie im Ressourcenordner hinzufügen.
Fügen Sie eine ValidateController.java im com.demo.web.controllers-Paket mit folgendem Inhalt hinzu:
package com.demo.web.controllers;import java.security.NoSuchAlgorithmException;import javax.validation.Valid;import org.springframework.stereotype.Controller;import org.springframework.ui.Model;import org.springframework.validation.BindingResult;import org.springframework.web.bind.annotation.ModelAttribute;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import com.demo.web.models.ValidateModel; @Controller @RequestMapping(value = "/validate")public class ValidateController { @RequestMapping(value="/test", method = {RequestMethod.GET}) public String test(Model model){ if(!model.containsAttribute("contentModel")){ model.addAttribute("contentModel", new ValidateModel()); } return "validatetest"; } @RequestMapping(value="/test", method = {RequestMethod.POST}) public String test(Model model, @Valid @ModelAttribute("contentModel") ValidateModel validateModel, BindingResult result) throws NoSuchAlgorithmException{ //如果有验证错误 返回到form页面 if(result.hasErrors()) return test(model); return "validatesuccess"; } }
Unter ihnen @Valid @ModelAttribute("contentModel") ValidateModel validateModels @Valid bedeutet, die Daten nach der Bindung an @ModelAttribute("contentModel") zu validieren.
Fügen Sie eine ValidateModel.java im Paket com.demo.web.models mit folgendem Inhalt hinzu:
package com.demo.web.models;import org.hibernate.validator.constraints.Email;import org.hibernate.validator.constraints.NotEmpty;import org.hibernate.validator.constraints.Range;public class ValidateModel{ @NotEmpty(message="{name.not.empty}") private String name; @Range(min=0, max=SpringMVC Learning Series (6) DatenüberprüfungSpringMVC Learning Series (6) Datenüberprüfung0,message="{age.not.inrange}") private String age; @NotEmpty(message="{email.not.empty}") @Email(message="{email.not.correct}") private String email; public void setName(String name){ this.name=name; } public void setAge(String age){ this.age=age; } public void setEmail(String email){ this.email=email; } public String getName(){ return this.name; } public String getAge(){ return this.age; } public String getEmail(){ return this.email; } }
Kommentieren Sie die Datei, in der die Überprüfung erfolgt Die Nachricht befindet sich. Fügen Sie den folgenden Inhalt zur Datei „validatemessages.properties“ hinzu:
name.not.empty=\uSpringMVC Learning Series (6) DatenüberprüfungSpringMVC Learning Series (6) Datenüberprüfung0D\u79F0\uSpringMVC Learning Series (6) DatenüberprüfungE0D\u80FD\uSpringMVC Learning Series (6) DatenüberprüfungESpringMVC Learning Series (6) DatenüberprüfungA\u7A7A\uSpringMVC Learning Series (6) Datenüberprüfung00SpringMVC Learning Series (6) Datenüberprüfung age.not.inrange=\uSpringMVC Learning Series (6) DatenüberprüfungE7SpringMVC Learning Series (6) Datenüberprüfung\u9F8SpringMVC Learning Series (6) Datenüberprüfung\u8D8SpringMVC Learning Series (6) Datenüberprüfung\uSpringMVC Learning Series (6) DatenüberprüfungSpringMVC Learning Series (6) DatenüberprüfungFA\u8SpringMVC Learning Series (6) Datenüberprüfung0SpringMVC Learning Series (6) Datenüberprüfung\uSpringMVC Learning Series (6) Datenüberprüfung6FSpringMVC Learning Series (6) Datenüberprüfung\uSpringMVC Learning Series (6) Datenüberprüfung00SpringMVC Learning Series (6) Datenüberprüfung email.not.correct=\u90AE\u7BBSpringMVC Learning Series (6) Datenüberprüfung\uSpringMVC Learning Series (6) Datenüberprüfung7SpringMVC Learning Series (6) Datenüberprüfung0\uSpringMVC Learning Series (6) Datenüberprüfung7SpringMVC Learning Series (6) Datenüberprüfung0\uSpringMVC Learning Series (6) DatenüberprüfungE0D\u6B6SpringMVC Learning Series (6) Datenüberprüfung\u786E\uSpringMVC Learning Series (6) Datenüberprüfung00SpringMVC Learning Series (6) Datenüberprüfung email.not.empty=\u7SpringMVC Learning Series (6) DatenüberprüfungSpringMVC Learning Series (6) DatenüberprüfungSpringMVC Learning Series (6) Datenüberprüfung\uSpringMVC Learning Series (6) DatenüberprüfungBSpringMVC Learning Series (6) Datenüberprüfung0\u90AE\uSpringMVC Learning Series (6) DatenüberprüfungEF6\uSpringMVC Learning Series (6) DatenüberprüfungE0D\u80FD\u60DF\u60SpringMVC Learning Series (6) Datenüberprüfung0\uSpringMVC Learning Series (6) Datenüberprüfung00SpringMVC Learning Series (6) Datenüberprüfung
wobei name.not.empty usw. jeweils dem xxx in message= entsprechen „xxx“ in der Datei „ValidateModel.java“, der folgende Inhalt ist der ASCII-Code, der bei der Eingabe von Chinesisch automatisch konvertiert wird. Natürlich können Sie xxx auch direkt als Eingabeaufforderungsinhalt schreiben, ohne eine weitere Datei „validatemessages.properties“ zu erstellen und hinzuzufügen , aber das ist falsch, weil es schwierig ist, es zu internationalisieren. Wenn Sie es kodieren, gibt es keine Möglichkeit, es zu internationalisieren.
Fügen Sie zwei Ansichten, „validatetest.jsp“ und „validatesuccess.jsp“, im Ordner „views“ hinzu. Der Inhalt lautet wie folgt:
nbsp;html PUBLIC "-//WSpringMVC Learning Series (6) DatenüberprüfungC//DTD HTML SpringMVC Learning Series (6) Datenüberprüfung.0SpringMVC Learning Series (6) Datenüberprüfung Transitional//EN" "http://www.wSpringMVC Learning Series (6) Datenüberprüfung.org/TR/htmlSpringMVC Learning Series (6) Datenüberprüfung/loose.dtd"><meta><title>Insert title here</title> <form> <errors></errors><br><br> name:<input><br> <errors></errors><br> age:<input><br> <errors></errors><br> email:<input><br> <errors></errors><br> <input> </form>
nbsp;html PUBLIC "-//WSpringMVC Learning Series (6) DatenüberprüfungC//DTD HTML SpringMVC Learning Series (6) Datenüberprüfung.0SpringMVC Learning Series (6) Datenüberprüfung Transitional//EN" "http://www.wSpringMVC Learning Series (6) Datenüberprüfung.org/TR/htmlSpringMVC Learning Series (6) Datenüberprüfung/loose.dtd"><meta><title>Insert title here</title> 验证成功!
Besonders hervorzuheben ist das form:form modelAttribute="contentModel" method="post">'smodelAttribute="xxx" dahinter Der Name xxx muss Übereinstimmung mit dem entsprechenden @Valid @ModelAttribute("xxx") Die xxx-Namen sind konsistent, andernfalls werden die Modelldaten und Fehlerinformationen nicht gebunden.
form:errors path="name">form:errors> zeigt die Fehlerinformationen der entsprechenden Attribute des Modells an. Wenn Pfad="*", wird es angezeigt die Fehlerinformationen aller Attribute der Modellfehlermeldung.
Führen Sie den Test durch:
Klicken Sie direkt auf „Senden“:
um es anzusehen Die Fehlermeldung für die Einstellung wird korrekt angezeigt.
Falsche Daten übermitteln:
Sie sehen, dass die eingestellte Fehlermeldung weiterhin korrekt angezeigt wird.
Geben Sie die korrekten Daten ein und senden Sie sie ab:
Sie können sehen, dass die Verifizierung erfolgreich war.
Im Folgenden sind die wichtigsten Verifizierungshinweise und Anweisungen aufgeführt:
Hinweise |
Anwendbare Datentypen |
Beschreibung |
@AssertFalse |
Boolean, boolean |
Der Elementwert der Verifizierungsanmerkung ist falsch |
@AssertTrue |
Boolean, boolean |
Überprüfen Sie, ob der Elementwert der Anmerkung wahr ist |
@DecimalMax(value=x) |
BigDecimal, BigInteger, String, byte, short, int , long und die jeweiligen Wrapper der primitiven Typen. Zusätzlich unterstützt von HV: jeder Untertyp von Number undCharSequence 🎜> |
BigDecimal, BigInteger, String, byte,short, int, long und die jeweiligen Wrapper der primitiven Typen: alle Untertypen von Number undCharSequence |
@Digits(integer=ganzzahlige Ziffern, Bruch=Dezimalziffern)
| BigDecimal, BigInteger, String, Byte, short, int, long und die jeweiligen Wrapper der primitiven Typen. Zusätzlich unterstützt von HV: jeder Untertyp von Number und CharSequence.Überprüfen Sie den Elementwert der Annotation. Die Obergrenze von Ganzzahlige Ziffern und Dezimalziffern | |
@Future
| java.util .Date, java .util.Calendar; Wird zusätzlich von HV unterstützt, wenn die Joda Time Datums-/Uhrzeit-API vorhanden ist
im Klassenpfad: alle Implementierungen von ReadablePartial und ReadableInstant.Überprüfen Sie, ob der Elementwert der Annotation (Datumstyp) nach der aktuellen Zeit liegt | |
@Max(value=x)
| BigDecimal, BigInteger, byte, short,int, long und die jeweiligen Wrapper der primitiven Typen . Zusätzlich unterstützt von HV: jeder Untertyp von CharSequence (der durch die Zeichenfolge dargestellte numerische Wert).
ausgewertet wird), jeder Untertyp von Zahl.Stellen Sie sicher, dass der mit Anmerkungen versehene Elementwert kleiner oder gleich dem durch @Max angegebenen Wert ist | |
@Min(value=x)
|
BigDecimal, BigInteger, Byte, Short, Int, Long und die jeweiligen Wrapper der primitiven Typen. Zusätzlich unterstützt von HV: jeder Untertyp von CharSequence (der durch die Char-Sequenz dargestellte numerische Wert ist ausgewertet), jeder Untertyp von Zahl. |
Stellen Sie sicher, dass der Elementwert der Annotation größer oder gleich dem durch @Min angegebenen Wert ist |
@NotNull |
Beliebiger Typ |
Überprüfen Sie, ob der Elementwert von Die Anmerkung ist nicht null |
@Null |
Jeder Typ |
Validieren Sie das mit Anmerkungen versehene Element. Der Wert ist null |
@Past |
java.util.Date, java.util .Calendar; Wird zusätzlich von HV unterstützt, wenn die Joda Time Datums-/Uhrzeit-API vorhanden ist im Klassenpfad: alle Implementierungen von ReadablePartial und ReadableInstant. |
Überprüfen Sie, ob der Elementwert der Annotation (Datumstyp) vor der aktuellen Zeit liegt |
@Pattern(regex=regular expression, flag=) |
String. Zusätzlich unterstützt von HV: jeder Untertyp von CharSequence. |
Überprüfen Sie, ob der annotierte Elementwert mit dem angegebenen regulären Ausdruck übereinstimmt |
@Size(min=Minimalwert , max=Maximalwert) |
String, Collection, Map und Arrays. Zusätzlich unterstützt von HV: jeder Untertyp von CharSequence. |
Stellen Sie sicher, dass der Elementwert der Anmerkung innerhalb des angegebenen Mindest- und Höchstbereichs (einschließlich) liegt, z. B. Zeichenlänge und Sammlungsgröße |
@Valid |
Jeder nicht-primitive Typ (Referenztyp) |
Überprüfen Sie das zugehörige Objekt, z. B. ein Bestellobjekt Geben Sie im Kontoobjekt Verify order object |
@NotEmpty |
|
Stellen Sie sicher, dass der Elementwert der Anmerkung nicht null und nicht leer ist (die Zeichenfolgenlänge ist nicht 0 und die Sammlungsgröße ist nicht 0) |
@Range(min=Minimalwert, Max=Maximalwert) |
|
Überprüfung Der mit Anmerkungen versehene Elementwert liegt zwischen dem Mindest- und Höchstwert |
@NotBlank |
|
Stellen Sie sicher, dass der Elementwert der Anmerkung nicht leer ist (nicht null und die Länge nach dem Entfernen des führenden Leerzeichens 0 ist). @NotBlank gilt nur für Zeichenfolgen und beim Vergleich werden die Leerzeichen in der Zeichenfolge entfernt |
@Length(min=lower limit, max=upper limit) |
|
Stellen Sie sicher, dass die Elementwertlänge der Anmerkung innerhalb des minimalen und maximalen Intervalls liegt |
|
Stellen Sie sicher, dass der Elementwert der Anmerkung E-Mail ist, oder Sie können reguläre Ausdrücke und Flags verwenden, um ein benutzerdefiniertes E-Mail-Format anzugeben |
Weitere Informationen finden Sie in der offiziellen Dokumentation: http://docs.jboss.org/hibernate/validator/SpringMVC Learning Series (6) Datenüberprüfung.SpringMVC Learning Series (6) Datenüberprüfung/reference/en-US/html/validator-usingvalidator.html
Hinweis: Ich habe den Beispielcode in den ersten SpringMVC Learning Series (6) DatenüberprüfungSpringMVC Learning Series (6) Datenüberprüfung Artikeln zuvor nicht beachtet. Ich weiß nicht, warum das damals hochgeladene Paket keinen hatte Daher konnte sie nach dem Herunterladen nicht direkt in Eclipse oder auf der virtuellen Maschine importiert werden. Diese Beispielcodes wurden nicht gesichert, aber die Codedateien sind noch vorhanden Erstellen Sie ein neues dynamisches Webprojekt und importieren Sie die entsprechenden Konfigurationsdateien, Controller und Ansichten. Bitte entschuldigen Sie die Unannehmlichkeiten.
Das Obige ist der Inhalt der Datenüberprüfung in SpringMVC Learning Series (6). Weitere verwandte Inhalte finden Sie unter PHP chinesische Website (www. php.cn)!