Vorwort
Die Validatorkomponente des Spring -Frameworks ist eine Hilfskomponente, die für die Datenintegrität und Gültigkeit sehr nützlich ist. Durch die Definition eines bestimmten Validators kann er an anderen Stellen verwendet werden, an denen er benötigt wird, und ist sehr häufig.
Vor der Ausführung der Geschäftslogik müssen sichergestellt werden, dass die empfangenen Eingabedaten durch Überprüfung legal und korrekt sind. Viele Male erfolgt jedoch viele Male die gleiche Überprüfung, was zu Code -Redundanz führt, die Zeit verschwendet und gegen das Trockenprinzip verstößt.
Sie können in Betracht ziehen, den Verifizierungscode zu verringern, um diese Probleme zu lösen.
JSR-303
JSR-303 ist ein Standard-Framework von Java zur Überprüfung der Bean-Daten-Legalität. Es definiert eine Reihe von Überprüfungsanmerkungen, die bei Mitgliedervariablen und Attributmethoden kommentiert werden können.
Die Hibernate -Validierung liefert diesen Satz von Standardimplementierungen. Wenn wir Spring Boot -Webstarter oder Spring Boot Starter -Validierung einführen, wird standardmäßig die Hibernate -Validierung eingeführt.
Nutzungsbeispiel
Fügen Sie den Code hinzu, nachdem Sie so viel Unsinn gesagt haben.
1. Einführung des Springboot -Projekts
<Depepentcy> <gruppe> org.springFramework.boot </GroupId> <artifactId> Spring-Boot-Starter-Web </artifactId> </abhängig> <Depopentcy> <gruppe-org.hiberNate.validator </gruupid> <artifactid> HiBernate-Validator </artifactidator </artifactid. <Depopenty> <gruppe> org.projectlombok </Groupid> <artifactId> lombok </artifactid> </abhängig>
2. Verifikationsobjekte schreiben
@Datapublic Class User {// Der Name darf nicht leer sein, und die Länge des Namens liegt zwischen 2 und 30 Bits // Wenn die Länge des Namens nicht übergeht, wird die Fehlermeldung aufgefordert. // Der Name darf nicht leer sein, und das Mindestalter beträgt 18 @notnull @min (18) Private Ganzzahl;}3. Erstellen Sie einen Controller
@SpringBootApplication@rastControllerPublic class UserApplication {public static void main (String [] args) {SpringApplication.run (userApplication.class, args); } // 1. Fügen Sie @valid Annotation vor dem zu überprüfen // 2 folgen. Befolgen Sie sie sofort ein BindingResult, um die Verifizierungsinformationen zu speichern. Tatsächlich können benutzerdefinierte Informationen nach Bedarf gemäß der BindingResult -Methode zurückgegeben werden. // Die übliche Lösung lautet: JSR-303 + Global ExceptionHandler if (bindingResult.haserrors ()) {return bindingResult.getAllErrors (); } return "ok"; }} 4. Führen Sie die Anwendung aus
Nach einer kurzen Demonstration der Ergebnisse der Operation ist ersichtlich, dass der Überprüfungsgerüst wirksam wurde.
Überprüfen Sie das Alter
Überprüfen Sie den Namen
Überprüfung verabschiedet
Gemeinsame Überprüfungsanmerkungen
@Null Das kommentierte Element muss null sein
@Notnull Das kommentierte Element darf nicht null sein
@AssertRue Das kommentierte Element muss wahr sein
@AssertFalse Das kommentierte Element muss falsch sein
@Min (Wert) Das kommentierte Element muss eine Zahl sein, und sein Wert muss größer oder gleich dem angegebenen Mindestwert sein.
@Max (Wert) Das kommentierte Element muss eine Zahl sein, und sein Wert muss geringer oder gleich dem angegebenen Maximalwert sein.
@Decimalmin (Wert) Das kommentierte Element muss eine Zahl sein und sein Wert muss größer oder gleich dem angegebenen Mindestwert sein
@Decimalmax (Wert) Das kommentierte Element muss eine Zahl sein, und sein Wert muss geringer oder gleich dem angegebenen Maximalwert sein
@Size (max =, min =) Die Größe des kommentierten Elements muss innerhalb des angegebenen Bereichs liegen.
@Digits (Ganzzahl, Fraktion) Das kommentierte Element muss eine Zahl sein und sein Wert muss in einem akzeptablen Bereich liegen.
@Paste Das kommentierte Element muss ein früheres Datum sein
@Future Das kommentierte Element muss ein zukünftiges Datum sein
@Pattern (Regex =, Flag =) Das kommentierte Element muss dem angegebenen regulären Ausdruck entsprechen
Überprüfen Sie die Anmerkungen, die vom Hibernate Validator bereitgestellt werden:
@Notblank (message =) überprüfen Sie, ob die Zeichenfolge nicht null ist und größer als 0 sein muss
@Email Das kommentierte Element muss eine E -Mail -Adresse sein
@Length (min =, max =) Die Größe der kommentierten Zeichenfolge muss im angegebenen Bereich liegen.
@NotEmpty Die kommentierte Zeichenfolge muss nicht leer sein
@Range (min =, max =, message =) Das kommentierte Element muss sich innerhalb des entsprechenden Bereichs befinden
Benutzerdefinierte Überprüfungsanmerkungen
Manchmal befindet sich der von uns gewünschte Überprüfungstyp nicht in der Bibliothek von Drittanbietern. Glücklicherweise bietet das System gute Expansionsfunktionen, und wir können die Überprüfung anpassen.
Zum Beispiel möchten wir das Mobiltelefonformat des Benutzers überprüfen und das Überprüfungsgerät der Handynummer schreiben.
1. Überprüfungsanmerkungen schreiben
// Wir können die Annotation direkt im System wie @min kopieren, sie in unsere neue Annotation kopieren und dann nach Bedarf ändern. @Target ({Methode, Feld, Annotation_Type, Konstruktor, Parameter})@Retention (Laufzeit)@dokumentiert // Die Implementierungsklasse der Annotierten. @Constraint (validatedBy = {ismobilevalidator.class}) public @Interface Ismobile {// Standardinformationen zur Überprüfung der Fehler String -Nachricht () Standard "Es gibt ein Problem mit dem Format des Mobiltelefonnummer"; // ob die Überprüfung boolean isRequired () standlust falsch; Klasse <?> [] Gruppen () Standard {}; Klasse <? Erweitert Payload> [] payload () Standard {};} 2. Schreiben Sie spezifische Implementierungsklassen
Wir wissen, dass Anmerkungen nur eine Marke sind und die eigentliche Logik in einer bestimmten Klasse implementiert werden muss. Die Annotation im vorherigen Schritt gibt an, dass die Klasse, die die Überprüfungsfunktion implementiert, Ismobilevalidator ist.
// benutzerdefinierte Annotationen müssen die ConstraintValidator -Schnittstelle implementieren, zwei Parameter darin // Die erste ist die spezifische Annotation, die überprüft werden muss // Der zweite ist der Parametertyp der Verifizierung der öffentlichen Klasse IsmobileValidator Geräte implementiert ConstraintValidator <Ismobile, String> {private boolean fordern = false; private statische endgültige Muster mobile_pattern = muster.comPile ("1 // d {10}"); // Werkzeugmethode, bestimmen Sie, ob es sich um eine Mobiltelefonnummer handelt, die öffentlich statische boolean ismobile (String src) {if (stringutils.isempty (SRC)) {return false; } Matcher M = Mobile_Pattern.Matcher (SRC); return m.matches (); } @Override public void initialize (Ismobile Constainnotation) {fordert = ConstaintAnnotation.isRequired (); } @Override public boolean isValid (String -Telefon, ConstraintValidatorContext ConstraintValidatorContext) {// Ist es eine Implementierung einer Mobiltelefonnummer, wenn (erforderlich) {return ismobile (Telefon); } else {if (stringutils.isempty (telefonisch)) {return true; } else {return ismobile (Telefon); }}}} 3. Testen Sie die Funktion der benutzerdefinierten Anmerkungen
@Datapublic Class User {@notnull @size (min = 2, max = 30, message = "Bitte überprüfen Sie, ob ein Problem mit der Länge des Namens") privater Zeichenfolge Name; @Notnull @min (18) Private Integer Age; // Dies ist das neu hinzugefügte Annotation @ismobile Private String -Telefon;}4. Test
passieren
Es gibt ein Problem mit der Handynummer
Es ist ersichtlich, dass die benutzerdefinierte Annotation wirksam hat.
Wir können auch weiterhin den Ort optimieren und eine neue globale Ausnahme erstellen. Wenn die Überprüfung fehlschlägt, werfen Sie globale Geschäftsausnahmen aus, fangen Sie geschäftliche Ausnahmen an und geben dann benutzerfreundliche Eingabeaufforderungsinformationen zurück.
zusätzlich
Es kann auch die Überprüfung der Methode bestehen.
1. Fügen Sie dem Controller @Validated Annotation hinzu
2. Fügen Sie der Controller -Methode Überprüfungsanmerkungen, @min, @max usw. hinzu.
@Validated@rastController@SpringbootApplicationPublic Class UserApplication {public static void main (String [] args) {SpringApplication.run (userApplication.class, args); } @RequestMapping ("/test2") public String test2 (@ismobile String Telefon) {return telefon + "ok"; } @ExceptionHandler (ConstraintViolationException.class) @ResponseBody Public Object HandleConstraintViolationException (ConstraintViolationException CVE) {Hashset <string> messageset = new Hashset (); für (Constraintviolation ConstraintViolation: cve.getConstraintViolations ()) {messageSet.add (ConstraintViolation.getMessage ()); } Messageset zurückgeben; }} Klassenüberprüfungsregeln
endlich
Durch die Verwendung des Verifizierungsgeräts müssen wir nicht mehr alle Controller überprüfen. Wenn der Code viel erfrischend ist, wird es sein. Wir schreiben sehr kurz Code, aber wir müssen darüber nachdenken, wie Code einfacher, klarer und förderlicher für die Wartung geschrieben werden kann. Das Schreiben doppelter Code ist eine Zeitverschwendung.
Wenn Sie in Zukunft eine Parameterüberprüfung begegnen, ist das erste, woran Sie denken, nicht direkt zu überprüfen. Sie können herausfinden, ob Sie eine bestimmte Art von Überprüfung geschrieben haben und diese direkt verwenden können.
Zusammenfassen
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, dass der Inhalt dieses Artikels einen gewissen Referenzwert für das Studium oder die Arbeit eines jeden hat. Wenn Sie Fragen haben, können Sie eine Nachricht zur Kommunikation überlassen. Vielen Dank für Ihre Unterstützung bei Wulin.com.