Spring prend en charge deux méthodes de validation différentes: la validation Spring et la validation du bean JSR-303. Les deux peuvent être utilisés en définissant un validateur Spring qui délègue à d'autres délégués, y compris le validateur de bean. Jusqu'ici tout va bien.
Mais lorsque vous annotez des méthodes pour demander une validation, c'est une autre histoire. Je peux annoter comme ça
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Valid @RequestBody TestObject obj, BindingResult result) {
ou comme ça
@RequestMapping(value = "/object", method = RequestMethod.POST)
public @ResponseBody TestObject create(@Validated @RequestBody TestObject obj, BindingResult result) {
Ici, @Valid est javax.validation.Valid et @Validated est org.springframework.validation.annotation.Validated . Les documents pour ce dernier disent
Variante du Valid de JSR-303, prenant en charge la spécification des groupes de validation. Conçu pour une utilisation pratique avec le support JSR-303 de Spring mais pas spécifique au JSR-303.
ce qui n'aide pas beaucoup car cela ne dit pas exactement en quoi c'est différent. Si pas du tout. Les deux semblent fonctionner assez bien pour moi.
la source
Réponses:
Comme vous l'avez cité dans la documentation, a
@Validated
été ajouté pour prendre en charge les «groupes de validation», c'est-à-dire le groupe de champs dans le bean validé. Cela peut être utilisé dans des formulaires en plusieurs étapes où vous pouvez valider le nom, l'email, etc. dans la première étape, puis d'autres champs dans la ou les étapes suivantes.La raison pour laquelle cela n'a pas été ajouté à l'
@Valid
annotation est qu'il est normalisé à l'aide du processus de la communauté java (JSR-303), ce qui prend du temps et les développeurs de Spring voulaient permettre aux gens d'utiliser cette fonctionnalité plus tôt.Accédez à ce ticket jira pour voir comment l'annotation est née.
la source
Une réponse plus simple. Pour ceux qui ne savent toujours pas ce qu'est un "groupe de validation" .
Utilisation pour la
@Valid
validationManette:
Objet de formulaire:
Utilisation pour la
@Validated
source du groupe de validation : http://blog.codeleak.pl/2014/08/validation-groups-in-spring-mvc.html
Manette:
Objet de formulaire:
la source
Dans l'exemple d'extraits de code de la question,
@Valid
et@Validated
ne faites aucune différence. Mais si le@RequestBody
est annoté avec unList
objet, ou est une valeur de chaîne annotée par@RequestParam
, la validation ne prendra pas effet.Nous pouvons utiliser le
@Validated
capacité de validation au niveau de la méthode pour le faire fonctionner. Pour y parvenir, le point clé est de se placer@Validated
sur la classe. Cela peut être une autre différence importante entre@Valid
et@Validated
dans le cadre à ressort.Réfrence
la source
List
objets? Je suppose que cela ne fonctionnera pas non plus pour d'autres collections commeMap
? Peut-être pourriez-vous me donner une explication plus détaillée dans ma question: stackoverflow.com/questions/60167961/…outre ci-dessus, vous ne pouvez postuler que
@Valid
sur un domaine / champ pour une validation imbriquée, pas avec un@validated
.la source