Je pense savoir où va votre question. Et comme cette question est celle qui apparaît dans les principaux résultats de recherche de Google, je peux donner une réponse claire sur ce que fait l'annotation @Valid.
Je vais présenter 3 scénarios sur la façon dont j'ai utilisé @Valid
Modèle:
public class Employee{
private String name;
@NotNull(message="cannot be null")
@Size(min=1, message="cannot be blank")
private String lastName;
}
JSP:
...
<form:form action="processForm" modelAttribute="employee">
<form:input type="text" path="name"/>
<br>
<form:input type="text" path="lastName"/>
<form:errors path="lastName"/>
<input type="submit" value="Submit"/>
</form:form>
...
Contrôleur pour le scénario 1:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
Dans ce scénario, après avoir soumis votre formulaire avec un champ lastName vide, vous obtiendrez une page d'erreur puisque vous appliquez des règles de validation mais que vous ne le gérez pas du tout.
Exemple de ladite erreur:
page d'exception
Contrôleur pour le scénario 2:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee,
BindingResult bindingResult){
return bindingResult.hasErrors() ? "employee-form" : "employee-confirmation-page";
}
Dans ce scénario, vous transmettez tous les résultats de cette validation à bindingResult, c'est donc à vous de décider quoi faire avec les résultats de validation de ce formulaire.
Contrôleur pour le scénario 3:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
@ExceptionHandler(MethodArgumentNotValidException.class)
@ResponseStatus(HttpStatus.BAD_REQUEST)
public Map<String, String> invalidFormProcessor(MethodArgumentNotValidException ex){
}
Dans ce scénario, vous ne gérez toujours pas les erreurs comme dans le premier scénario, mais vous le transmettez à une autre méthode qui prendra en charge l'exception que @Valid déclenche lors du traitement du modèle de formulaire. Vérifiez ceci pour voir quoi faire avec la cartographie et tout ça.
Pour résumer : @Valid seul avec ne rien faire de plus qui déclenche la validation des champs annotés JSR 303 de validation ( @NotNull, @Email, @Size, etc ... ), il vous reste à spécifier une stratégie de ce qu'il faut faire avec les résultats de ladite validation.
J'espère que j'ai pu dégager quelque chose pour les gens qui pourraient trébucher avec ça.
@Valid
leApplicationForm
paramètre mais les validations étaient toujours déclenchées surdate
lenull
champ (défini comme ). S'il vous plaît, expliquez.