Validated, Valid, Validator, vous connaissez la différence entre les trois

Related Tagsï¼1.Alibaba Cloud propose un HSM validé FIPS pour la sécurité des clés cryptographiques
2. Validité des noms de domaine

Validated, Valid, Validator, vous connaissez la différence entre les trois

1. Conclusion d'abord
Similitudes entre Valid et Validated
â¢Les méthodes et les paramètres peuvent être validés
â¢@Valid et @Validated : ces deux annotations déclenchent l'application de la validation standard des beans.
Si la validation échoue, une BindException est levée et une réponse 400 (BAD_REQUEST) est renvoyée. Les erreurs de validation peuvent également être gérées localement dans le contrôleur via les paramètres Errors ou BindingResult. De plus, si une annotation @RequestBody précède le paramètre, l'erreur de validation lève une exception MethodArgumentNotValidException.
JSR 380
JSR 380 est la spécification de l'API Java pour la validation des beans et fait partie de Jakarta EE et JavaSE. Elle garantit que les propriétés du bean respectent certaines conditions, à l'aide d'annotations telles que @NotNull, @Min et @Max.

Cette version nécessite Java 8 ou ultérieur et tire parti des nouvelles fonctionnalités de Java 8, telles que les annotations de type et la prise en charge de nouveaux types comme Optional et LocalDate.
Pour plus d'informations sur la spécification, consultez JSR 380.

Quelle est la différence entre Valid et Validated ?


javax.validation.Valid _
oAnnotation standard de la spécification JSR-303, il s'agit d'une annotation de marquage.
oL'annotation prend en charge ElementType#METHOD, ElementType#FIELD, ElementType#CONSTRUCTOR,
oElementType#PARAMETER, ElementType#TYPE_USE
â¢org.springframework.validation.annotation.Validated _
oIl s'agit d'une annotation personnalisée de Spring qui ajoute la fonctionnalité de regroupement.
oL'annotation prend en charge ElementType#TYPE, ElementType#METHOD, ElementType#PARAMETER
Différence entre @Valid et @Validated

Validated, Valid, Validator.Validator


Bean Validation 2.0 (JSR 380) définit un modèle de métadonnées et une API pour la validation des entités et des méthodes. Hibernate Validator en est actuellement la meilleure implémentation.
L'interface Validator dispose de trois méthodes permettant de valider l'ensemble de l'entité ou une seule de ses propriétés.
â¢Validator#validate () valide toutes les contraintes de tous les beans
â¢Validator#validateProperty () valide une propriété unique
â¢Validator#validateValue () vérifie si une propriété d'une classe donnée peut être validée avec succès
Qu'il s'agisse de la vérification des paramètres requestBody ou de la vérification au niveau de la méthode, Hibernate Validator est finalement appelé pour effectuer la validation. Spring Validation ne fait qu'ajouter une couche d'encapsulation.
La validation des entrées utilisateur est une fonctionnalité courante dans la plupart de nos applications. Dans l'écosystème Java, nous utilisons exclusivement l'API Java Standard Bean Validation pour cela. De plus, depuis la version 4.0, elle est bien intégrée à Spring.
Dans les sections suivantes, nous allons les examiner en détail.

Les annotations @Valid et @Validated
Dans Spring, nous utilisons l'annotation @Valid de JSR-303 pour la validation au niveau de la méthode. Nous l'utilisons également pour marquer les propriétés membres à valider. Cependant, cette annotation ne prend pas en charge la validation par groupe.
Les groupes permettent de limiter les contraintes appliquées lors de la validation. Un cas d'utilisation courant est celui des assistants UI. Dans la première étape, nous pouvons avoir un sous-groupe de champs. Dans les étapes suivantes, un autre groupe appartenant au même bean peut intervenir. Nous devons donc appliquer des contraintes sur ces champs limités à chaque étape, mais @Valid ne le prend pas en charge.
Dans ce cas, pour la validation par groupe, nous devons utiliser @Validated de Spring, qui est une variante de @Valid de JSR-303. Elle s'utilise au niveau de la méthode. Pour le marquage des propriétés membres, nous continuons à utiliser l'annotation @Valid.
Voyons maintenant l'utilisation de ces annotations à travers un exemple.



3. Exemples


Prenons un exemple simple d'inscription utilisateur développé avec Spring Boot. Nous n'aurons d'abord que les propriétés name et password :

Après avoir confirmé que le test s'exécute correctement, nous étendons la fonctionnalité. L'étape logique suivante consiste à passer à une inscription utilisateur complexe. Pour la première étape, le nom et le mot de passe restent identiques. Dans la deuxième étape, nous obtenons des informations supplémentaires comme l'âge et le téléphone. Nous mettons donc à jour notre objet de domaine avec ces champs supplémentaires :

Cependant, nous constatons cette fois que le test précédent échoue. Cela est dû au fait que nous n'avons pas transmis les champs age et phone. Pour prendre en charge ce comportement, nous avons besoin de la validation par groupe et de l'annotation @Validated.

Pour cela, nous devons regrouper les champs en créant deux groupes distincts. Nous devons d'abord créer deux interfaces marqueurs, une pour chaque groupe ou chaque étape. Nous pouvons consulter notre article sur la validation par groupe pour voir comment elle est mise en œuvre. Concentrons-nous ici sur les différences entre les annotations.
Nous aurons l'interface BasicInfo pour la première étape et AdvanceInfo pour la deuxième étape. De plus, nous mettrons à jour la classe UserAccount pour utiliser ces interfaces marqueurs comme suit :
Voyons ensuite comment @Valid déclenche la validation des propriétés imbriquées.

Validated, Valid, Validator.Utiliser la validation imbriquée avec @Valid


L'annotation @Valid permet de valider les propriétés imbriquées. Elle déclenche la validation des objets imbriqués. Par exemple, dans notre scénario actuel, créons un objet UserAddress :
5. Combiner @Valid et @Validated pour effectuer une vérification sur les collections
Si le corps de la requête transmet directement un tableau JSON au backend et que vous souhaitez effectuer une vérification des paramètres sur chaque élément du tableau, sachez que si nous utilisons directement list ou set de java.util.Collection pour recevoir les données, la vérification des paramètres ne sera pas effective. Nous pouvons utiliser une collection list personnalisée pour recevoir les paramètres :
â¢Encapsuler le type List et déclarer l'annotation @Valid
package com.devicemag.core.BO;

import javax.validation.Valid ; _
import java.util .*;

Validated, Valid, Validator : en conclusion

Validated, Valid, Validator. En conclusion, pour toute validation de base, nous utiliserons l'annotation @Valid de JSR sur l'appel de méthode. En revanche, pour toute validation par groupe, y compris les séquences de groupes, nous devrons utiliser l'annotation @Validated de Spring dans nos appels de méthode. L'annotation @Valid est également nécessaire pour déclencher la validation des propriétés imbriquées.
Validated repose toujours sur AOP. Pour la vérification des méthodes, la méthode d'interception dynamique AOP est utilisée, et le Validator JSR303 est utilisé pour effectuer la validation. Pour la vérification des attributs du Bean, elle repose sur le cycle de vie du Bean, et la validation est effectuée avant et après son initialisation.

phone Contacter
Hi, I'm Alibaba Cloud AI Assistant!
I can help with questions and solutions.