A tout moment, lorsque vous souhaitez gérer la logique métier d'une application, la validation des données est quelque chose que vous devez considérer et affronter. L'application doit disposer de moyens permettant de garantir que les données entrantes sont sémantiquement correctes. En règle générale, les applications sont superposées, différentes couches étant complétées par différents développeurs. Souvent, la même logique de validation des données apparaîtra dans différentes couches, ce qui entraînera une redondance du code et certains problèmes de gestion, tels que la cohérence sémantique. Afin d'éviter une telle situation, il est préférable de lier la logique de validation au modèle de domaine correspondant.
Bean Validation définit le modèle de métadonnées et l'API correspondants pour la validation JavaBean. Les métadonnées par défaut sont les annotations Java et les informations de métadonnées d'origine peuvent être écrasées et étendues à l'aide de XML. Bean Validation est un cadre de validation des données d'exécution, et les informations sur les erreurs de validation seront renvoyées immédiatement après la validation.
Hibernate Validator est l'implémentation de référence de Bean Validation. Hibernate Validator fournit l'implémentation de toutes les contraintes intégrées dans la spécification JSR 303, en plus de quelques contraintes supplémentaires.
a) La séparation de la logique de vérification et de la logique métier réduit le couplage des programmes
b) Unifié et standardisé ; méthode de vérification, vous n'avez pas besoin de réécrire le code de vérification
c) Vous serez plus concentré sur votre entreprise et laisserez de côté ces choses fastidieuses ; < ;dependency>
La démo de cet article est basée sur springmvc, ce qui nécessite d'effectuer des configurations pertinentes.
2.3 Ajouter une contrainte à JavaBean
Comme le montre la figure, plusieurs contraintes sont ajoutées à User : le nom n'est pas vide et la contrainte de longueur est ajoutée ; le sexe est ajouté avec une contrainte personnalisée, qui sera introduite plus tard ; La vérification de JSR-303 est basée sur des annotations, et une série d'annotations de restriction ont été définies en interne. Il suffit de marquer ces annotations sur les attributs de la classe d'entité qui doivent être vérifiés ou sur leurs méthodes get correspondantes.2.4 Contrainte personnalisée
Comme le montre la figure, une annotation ValidSex est définie et l'annotation est marquée du @ Annotation de contrainte , l'utilisation de l'annotation @Constraint indique que nous avons défini une annotation pour les restrictions. L'attribut validatedBy de l'annotation @Constraint est utilisé pour spécifier quel ConstraintValidator le type de restriction actuel que nous définissons doit être vérifié. Dans le code ci-dessus, nous avons précisé que la classe de validation de type de restriction ValidSex est ValidSexValidator. De plus, il convient de noter que trois attributs doivent être définis lorsque nous définissons nos propres annotations de type restreint, tels que les attributs de message, de groupes et de charge utile affichés dans le code ci-dessus.
Comme le montre l'image, ConstraintValidator utilise des génériques. Il doit spécifier un total de deux types. Le premier type est le type de paramètre de la méthode d'initialisation correspondante et le deuxième type est le premier type de paramètre de la méthode isValid correspondante. À partir des deux méthodes ci-dessus, nous pouvons voir que la méthode initialize peut obtenir les attributs du type de restriction actuel et que la méthode isValid est utilisée pour la vérification.
2.6 Vérifier les paramètres
Dans l'image ci-dessus, nous pouvons voir que nous avons défini un LoginController. Le Controller dispose d'un validateur de méthode processeur qui gère l'opération de validation. Il doit recevoir un objet User envoyé par le client. Validateur pour ce faire. Objet utilisateur pour vérification. Nous pouvons d’abord voir que le paramètre user reçu par notre méthode de validation est annoté avec @Valid. De plus, notre méthode de processeur doit recevoir un paramètre contenant des erreurs, qui peuvent être des erreurs elles-mêmes, ou sa sous-classe BindingResult. L'utilisation du paramètre Errors indique à Spring que les erreurs lors de la vérification des données de l'objet de formulaire seront traitées par nous-mêmes. Sinon, Spring lèvera une exception. directement. De cette façon, lorsque nous demandons au validateur de méthode du processeur, l'objet utilisateur sera vérifié et les informations de vérification pertinentes seront stockées dans l'objet Erreurs actuel. Nous pouvons ensuite effectuer différentes opérations dans notre méthode de processeur selon qu'il existe ou non des informations d'exception de vérification. Dans le code ci-dessus, nous définissons que nous passerons à la page de connexion lorsqu'il y aura des informations d'exception. De cette façon, nous pouvons afficher ces messages d'erreur via la balise d'erreurs sur la page de connexion.
a) Si vous vérifiez un attribut (méthode getter), vous devez suivre la convention de dénomination des Java Beans (spécification JavaBeans
b) Statique ; Les champs et les méthodes ne peuvent pas être soumis à une vérification de contraintes ;
c) Les contraintes s'appliquent aux interfaces et aux classes de base
d) Les éléments cibles définis par les annotations de contraintes peuvent être des champs, des attributs ou des types ; 🎜>
e) Vous pouvez utiliser la validation par contrainte sur une classe ou une interface, qui effectuera une vérification d'état sur la classe ou l'instance qui implémente l'interface f) Vous pouvez utiliser la validation par contrainte sur les champs et les attributs ; , mais vous ne pouvez pas. Les mêmes contraintes sont déclarées à plusieurs reprises sur les champs et les propriétés associées (méthodes getter des champs). Conclusion : Soyez gentil avec tous ceux qui vous entourent, car ce sont eux qui rendent votre vie possible.Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!