La majeure partie de la vérification des données de demande HTTP dans le système B / S est effectuée du côté client, qui est également pour des considérations de simplicité et d'expérience utilisateur, mais la vérification côté serveur est indispensable dans certains systèmes ayant des exigences de haute sécurité.
Spring3 prend en charge le cadre de vérification JSR-303. JSR-303 est un sous-spectre dans Java EE 6 appelé BeanValidation. L'implémentation officielle de référence est le validateur Hibernate (n'a rien à voir avec Hibernate ORM). JSR 303 est utilisé pour vérifier les valeurs des champs dans les haricots Java.
Le validateur vérifie principalement la rationalité des données soumises par l'utilisateur, telles qu'elle est vide, si la longueur du mot de passe est supérieure à 6 chiffres, qu'il soit purement numérique, etc. Alors, comment pouvez-vous utiliser un cadre de vérification aussi puissant dans Spring Boot?
Combiné avec la validation et le Springboot
1. Ajouter des balises à Bean
Partie du code:
La balise doit être ajoutée à l'attribut, @notblank La signification de la balise est expliquée à la fin de l'article
classe publique User {ID entier privé; @Notblank (message = "{user.name.notblank}") Nom de chaîne privée; Nom d'utilisateur de chaîne privée;2. Allumez la vérification dans le contrôleur
Ajoutez la balise @validated au paramètre de demande dans Controller pour activer la vérification
@RequestMapping (méthode = requestMethod.Post) Utilisateur public Create (@RequestBody @Validated User utilisateur) {return userService.Create (utilisateur); }3. Créez un nouveau fichier de configuration de message d'erreur sous ressource
Créer un nouveau fichier de configuration de message d'invite "ValidationMessages.Properties" dans le répertoire des ressources
Remarque: Le nom doit être "ValidationMessages.Properties" car Springboot lit automatiquement le message d'erreur dans validationMessages.Properties dans le chemin de classe.
Le fichier ValidationMessages.Properties est codé sous la forme d'ASCII. Le type de données est une valeur clé. Key "user.name.notblank" est la valeur de message correspondante dans les accolades du premier bean étape.
La valeur est un message rapide, mais c'est ASCII. (Le contenu est "le nom ne peut pas être vide")
4. Personnalisez le gestionnaire d'exceptions pour attraper des messages d'erreur
Lorsque la vérification échoue, une exception sera lancée. Le message d'exception est les informations rapides configurées dans validationMessages.Properties. Le gestionnaire d'exceptions est défini ici. Capturez les informations d'exception (car il peut y avoir plusieurs éléments qui ne parviennent pas à passer la vérification, ils sont capturés et traités uniformément) et les jetteront à l'avant. (C'est l'expéditeur séparé avant et arrière)
public void methodargumentNotValidexception (exception ex, httpservletRequest request, httpservletResponse réponse) {logger.error (":" + communautil.gethttpclientInfo (request), ex); MethodArgumentNotValidexception c = (méthodyArgumentNotValidexception) ex; List <obJecterror> errors = c.getBindingResult (). GetAllErrors (); StringBuffer errormsg = new StringBuffer (); errors.stream (). foreach (x -> errormsg.append (x.getDefaultMessage ()). append (";")); PoulateExceptionResponse (Response, httpstatus.internal_server_error, errormsg.toString ()); } private void PoulateExceptionResponse (HttpServletResponse Response, HttpStatus ErrorCode, String errorMessage) {try {Response.SenDerror (errorcode.value (), errorMessage); } catch (ioException e) {logger.Error ("n'a pas réussi à remplir l'erreur de réponse", e); }}5. attachent quelques significations de balises
| limite | illustrer |
|---|---|
| @Nul | Limiter uniquement à Null |
| @Notnull | La limite ne doit pas être nul |
| @Assertfalse | La limite doit être fausse |
| @Asserttrue | La limite doit être vraie |
| @Decimalmax (valeur) | La limite doit être un nombre qui n'est pas supérieur à la valeur spécifiée. |
| @Decimalmin (valeur) | La limite doit être un nombre pas moins que la valeur spécifiée |
| @Digits (entier, fraction) | La limite doit être une décimale, et le nombre de chiffres dans la partie entière ne peut pas dépasser entier, et le nombre de chiffres dans la partie de fraction ne peut dépasser la fraction |
| @Avenir | La limite doit être une date future |
| @Max (valeur) | La limite doit être un nombre qui n'est pas supérieur à la valeur spécifiée. |
| @Min (valeur) | La limite doit être un nombre pas moins que la valeur spécifiée |
| @Passé | La limite doit être une date passée |
| @Pattern (valeur) | La restriction doit se conformer à l'expression régulière spécifiée |
| @Size (Max, Min) | LIMIT LEUR LEUR DE LA LAUTRE DOIT ÊTRE ENTRE MIN |
| @Passé | Vérifiez que la valeur de l'élément (type de date) de l'annotation est antérieure à l'heure actuelle |
| @Notempty | Vérifiez que la valeur de l'élément de l'annotation de vérification n'est pas nulle et non vide (la longueur de chaîne n'est pas 0, la taille de la collection n'est pas 0) |
| @Notblank | Vérifiez que la valeur de l'élément de l'annotation n'est pas vide (pas nul, la longueur est 0 après avoir retiré le premier espace). Contrairement à @Notempty, @notblank n'est appliqué qu'aux chaînes et supprimera les espaces de chaîne lors de la comparaison. |
| Vérifiez que la valeur de l'élément de l'annotation est un e-mail, et vous pouvez également spécifier un format de messagerie personnalisé via des expressions et des drapeaux réguliers. |
Exemple
@Pattern (regexp = "^ [a-za-z0-9] + $", message = "{account.username.space}") @Size (min = 3, max = 20, message = "{account.userName.size}")Exemple 2
Ici, nous utilisons principalement des annotations pour l'apprentissage. Parlons d'abord de nos besoins:
Nous avons une démo.html, sur la page, il y a deux cases d'entrée de nom d'élément, la bibliothèque d'entrée de mot de passe et le bouton Soumettre.
Après avoir soumis à l'arrière-plan, utilisez le validateur pour la vérification, puis transmettez à Demo.html s'il y a une erreur,
Nous écrivons d'abord une classe d'entité pour recevoir une entrée utilisateur et utilisons l'annotation du validateur pour vérifier:
package com.kfit.demo; import org.hibernate.validator.constraints.length; import org.hibernate.validator.constraints.notempty; Demo de classe publique {ID long privé; @Notempty (message = "Nom ne peut pas être vide") Nom de la chaîne privée; @Notempty (message = "mot de passe ne peut pas être vide") @Length (min = 6, message = "Longueur de mot de passe ne peut pas être inférieur à 6 chiffres") Mot de passe de chaîne privée; publicLong getID () {return id; } publicVoid setid (longId) {this.id = id; } public String getName () {Nom de retour; } public void setName (string name) {this.name = name; } public String getPassword () {return mot de passe; } public void setPassword (String Motword) {this.password = mot de passe; } @Override public String toString () {return "Demo [id =" + id + ", name =" + name + ", mot de passe =" + mot de passe + "]"; }}Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.