Préface
Le composant validateur du cadre de ressort est un composant auxiliaire, qui est très utile pour l'intégrité et la validité des données. En définissant un certain validateur, il peut être utilisé dans d'autres endroits où il est nécessaire, et il est très courant.
Avant d'exécuter la logique commerciale, il est nécessaire de s'assurer que les données d'entrée reçues sont légales et correctes par vérification. Cependant, plusieurs fois, la même vérification se produit plusieurs fois, ce qui conduit à la redondance du code, au temps perdu et viole le principe sec.
Vous pouvez envisager d'encapsuler le code de vérification pour résoudre ces problèmes.
JSR-303
JSR-303 est un cadre standard fourni par Java pour la vérification de la légalité des données Bean. Il définit un ensemble d'annotations de vérification qui peuvent être annotées sur les variables membre et les méthodes d'attribut.
La validation Hibernate fournit cet ensemble d'implémentations standard. Lorsque nous introduisons Spring Boot Web Starter ou Spring Boot Starter Validation, la validation Hibernate sera introduite par défaut.
Exemple d'utilisation
Après avoir dit tellement de bêtises, ajoutez le code.
1. Introduire le projet Springboot
<dependency> <proupId> org.springframework.boot </proupId> <Artifactid> printemps-boot-starter-web </ artifactid> </pedigency> <dependency> <proupId> org.hibernate.validator </pruipId> <pteridenctid> hibernate-validator </ artifactid> </sendency> <! <dependency> <proupId> org.projectlombok </rompuprid> <letifactive> lombok </retifactid> </dependency>
2. Écrivez des objets de vérification
@Datapublic Class User {// Le nom n'est pas autorisé à être vide, et la durée du nom est comprise entre 2 et 30 bits // Si la longueur du nom ne passe pas, alors le message d'erreur est invité à @notnull @Size (min = 2, max = 30, message = "s'il vous plaît vérifier s'il y a un problème avec la durée du nom") Nom de la chaîne privée; // Le nom n'est pas autorisé à être vide, et l'âge minimum est de 18 @notnull @min (18) Âge entier privé;}3. Créez un contrôleur
@ SpringbootApplication @ RestControllerPublic classe UserApplication {public static void main (String [] args) {springApplication.run (userApplication.class, args); } // 1. Ajouter une annotation @valid avant le paramètre à vérifier // 2. Suivez-le immédiatement, suivez un objet de liaison BindingResult pour stocker les informations de vérification @RequestMapping ("/ test1") Public Object Test1 (@valid utilisateur, un message d'erreur BindingResult) {// s'il y a un problème avec le message de vérification, un message d'erreur sera renvoyé // ici. En fait, les informations personnalisées peuvent être renvoyées en fonction de la méthode BindingResult au besoin. // La solution habituelle est: JSR-303 + Global ExceptHandler if (bindingResult.haserrors ()) {return bindingResult.getAllErrors (); } return "ok"; }} 4. Exécutez l'application
Après une brève démonstration des résultats de l'opération, on peut voir que le cadre de vérification a pris effet.
Âge du contrôle
Vérifier le nom
Vérification a été adoptée
Annotations de vérification courantes
@Null L'élément annoté doit être nul
@Notnull L'élément annoté ne doit pas être nul
@AssertTrue L'élément annoté doit être vrai
@Assertfalse L'élément annoté doit être faux
@Min (valeur) L'élément annoté doit être un nombre et sa valeur doit être supérieure ou égale à la valeur minimale spécifiée.
@Max (valeur) L'élément annoté doit être un nombre et sa valeur doit être inférieure ou égale à la valeur maximale spécifiée.
@Decimalmin (valeur) L'élément annoté doit être un nombre, et sa valeur doit être supérieure ou égale à la valeur minimale spécifiée
@Decimalmax (valeur) L'élément annoté doit être un nombre, et sa valeur doit être inférieure ou égale à la valeur maximale spécifiée
@Size (max =, min =) La taille de l'élément annoté doit être dans la plage spécifiée.
@Digits (entier, fraction) L'élément annoté doit être un nombre et sa valeur doit être dans une plage acceptable.
@Past L'élément annoté doit être une date passée
@Future L'élément annoté doit être une date future
@Pattern (regex =, drap =) L'élément annoté doit se conformer à l'expression régulière spécifiée
Vérifiez les annotations fournies par Hibernate Validator:
@Notblank (message =) Vérifiez que la chaîne n'est pas nulle et doit être supérieure à 0
@Email L'élément annoté doit être une adresse e-mail
@Length (min =, max =) La taille de la chaîne annotée doit être dans la plage spécifiée.
@Notempty La chaîne commentée doit être non vide
@Range (min =, max =, message =) L'élément annoté doit être dans la plage appropriée
Annotations de vérification personnalisées
Parfois, le type de vérification que nous voulons n'est pas dans la bibliothèque tierce. Heureusement, le système offre de bonnes capacités d'extension et nous pouvons personnaliser la vérification.
Par exemple, nous souhaitons vérifier le format de téléphone mobile de l'utilisateur et écrire l'appareil de vérification du numéro de téléphone mobile.
1. Annotations de vérification d'écriture
// Nous pouvons copier directement l'annotation dans le système tel que @min, le copier dans notre nouvelle annotation, puis le modifier au besoin. @Target ({Method, Field, Annotation_Type, Constructeur, Paramètre}) @ Rétention (Runtime) @ documenté // La classe d'implémentation de l'annot. @Constraint (ValidatedBy = {IsmobileValidator.class}) public @Interface Ismobile {// Informations par défaut pour la vérification de l'erreurs Message de chaîne () par défaut "Il y a un problème avec le format de numéro de téléphone mobile"; // s'il faut forcer la vérification booléenne isRequired () par défaut false; Classe <?> [] Groupes () default {}; Classe <? étend la charge utile> [] la charge utile () par défaut {};} 2. Écrivez des classes d'implémentation spécifiques
Nous savons que les annotations ne sont qu'une marque, et la vraie logique doit être implémentée dans une classe spécifique. L'annotation dans l'étape précédente spécifie que la classe qui implémente la fonction de vérification est IsmobileValidator.
// Annotations personnalisées doit implémenter l'interface CONSTRAINTVALIDATOR, deux paramètres dans l'informatique // Le premier est l'annotation spécifique à vérifier // Le second est le type de paramètre de la classe publique de vérification IsmobileValidator implémente CONSTRAINTVALIDATOR <SMOBILE, String> {private Boolean requised = false; Private Static Final Pattern mobile_pattern = motive.compile ("1 // d {10}"); // Méthode de l'outil, déterminez s'il s'agit d'un numéro de téléphone mobile public booléen statique Ismobile (String src) {if (stringUtils.isempty (src)) {return false; } Matcher m = mobile_pattern.matcher (src); retour m.matches (); } @Override public void initialize (ismobile contraintAnnotation) {required = contraintAnnotation.isrequired (); } @Override public boolean isvalid (String Téléphone, CONSTRAINTVALIDATORCEXT CONSTRAINTVALIDATORCONTEXT) {// est-ce une implémentation d'un numéro de téléphone mobile if (requis) {return isMobile (téléphone); } else {if (stringUtils.isempty (téléphone)) {return true; } else {return ismobile (téléphone); }}}} 3. Testez la fonction des annotations personnalisées
@Datapublic classe utilisateur {@notnull @size (min = 2, max = 30, message = "Veuillez vérifier s'il y a un problème avec la longueur du nom") Nom de chaîne privée; @Notnull @min (18) Age entier privé; // Ceci est la nouvelle annotation @ismobile private String Téléphone;}4. Test
passer
Il y a un problème avec le numéro de mobile
On peut voir que l'annotation personnalisée a pris effet.
Nous pouvons également continuer à optimiser le lieu et à créer une nouvelle exception mondiale. Si la vérification échoue, lancez des exceptions commerciales mondiales, captez les exceptions commerciales, puis renvoyez des informations rapides conviviales.
supplémentaire
Il peut également passer la vérification de la méthode.
1. Ajouter une annotation @validated au contrôleur
2. Ajouter des annotations de vérification, @min, @max, etc. à la méthode du contrôleur.
@ Validé @ restController @ SpringbootApplicationPublic class userApplication {public static void main (String [] args) {springApplication.run (userApplication.class, args); } @RequestMapping ("/ test2") Public String test2 (@ismobile String Phone) {return téléphone + "ok"; } @ExceptionHandler (CONSTRAINTVIOLATIONException.class) @ResponseBody Public Object HandleConstraimentViolationException (CONSTRAINTVIOLATIONException CVE) {HashSet <string> MessagesSet = new HashSet (); pour (CONSTRAINTVIOLATION CONSTRAINTIONviolation: cve.getConstraintviolations ()) {MessageSet.add (CONSTRAINTVIOLATION.GETMESSAGE ()); } return messetSet; }} Règles de vérification des classes
enfin
En utilisant le dispositif de vérification, nous n'avons plus besoin de vérifier tous les contrôleurs. Si le code est très rafraîchissant, ce sera le cas. Nous écrivons du code très brièvement, mais nous devons réfléchir à la façon d'écrire du code plus simple, plus clair et plus propice à la maintenance. L'écriture du code en double est un perte de temps.
Lorsque vous rencontrez une vérification des paramètres à l'avenir, la première chose à laquelle vous pensez n'est pas de le vérifier directement. Vous pouvez savoir si vous avez écrit un certain type de vérificateur et que vous pouvez l'utiliser directement.
Résumer
Ce qui précède est l'intégralité du contenu de cet article. J'espère que le contenu de cet article a une certaine valeur de référence pour l'étude ou le travail de chacun. Si vous avez des questions, vous pouvez laisser un message pour communiquer. Merci pour votre soutien à wulin.com.