Ich glaube, ich weiß, wohin Ihre Frage führt. Und da diese Frage in den Suchergebnissen von Google auftaucht, kann ich eine einfache Antwort darauf geben, was die Annotation @Valid bewirkt.
Ich werde 3 Szenarien vorstellen, wie ich @Valid verwendet habe
Modell:
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>
...
Controller für Szenario 1:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
In diesem Szenario wird nach dem Absenden Ihres Formulars mit einem leeren Feld für den Nachnamen eine Fehlerseite angezeigt, da Sie Validierungsregeln anwenden, diese jedoch überhaupt nicht verarbeiten.
Beispiel für diesen Fehler:
Ausnahmeseite
Controller für Szenario 2:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee,
BindingResult bindingResult){
return bindingResult.hasErrors() ? "employee-form" : "employee-confirmation-page";
}
In diesem Szenario übergeben Sie alle Ergebnisse dieser Validierung an das BindingResult. Es liegt also an Ihnen, zu entscheiden, was mit den Validierungsergebnissen dieses Formulars geschehen soll.
Controller für Szenario 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){
}
In diesem Szenario behandeln Sie die Fehler immer noch nicht wie im ersten Szenario, sondern übergeben sie an eine andere Methode, die die Ausnahme berücksichtigt , die @Valid bei der Verarbeitung des Formularmodells auslöst. Überprüfen Sie dies, um zu sehen, was mit dem Mapping und all dem zu tun ist.
Um es zusammenzufassen : @Valid auf seine eigene mit nichts mehr tun , dass Auslöser der Validierung Validierung JSR 303 kommentierten Felder ( @NotNull, @Email, @size, etc ... ), müssen Sie noch eine Strategie bestimmen , was zu tun mit den Ergebnissen dieser Validierung.
Ich hoffe, ich konnte etwas für Leute klären, die darüber stolpern könnten.
@Valid
aufApplicationForm
Parameter aber noch wurde Validierungen beschossendate
(Set alsnull
) Feld. Bitte erkläre.