私はあなたの質問がどこに向かっているのか知っていると思います。そして、この質問はグーグルの検索メイン結果にポップアップする質問なので、@ Validアノテーションが何をするのかについてわかりやすい答えを出すことができます。
@Validの使用方法に関する3つのシナリオを紹介します
モデル:
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>
...
シナリオ1のコントローラー:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee){
return "employee-confirmation-page";
}
このシナリオでは、lastNameフィールドを空にしてフォームを送信した後、検証ルールを適用しているが、それをまったく処理していないため、エラーページが表示されます。
上記のエラーの例:
例外ページ
シナリオ2のコントローラー:
@RequestMapping("processForm")
public String processFormData(@Valid @ModelAttribute("employee") Employee employee,
BindingResult bindingResult){
return bindingResult.hasErrors() ? "employee-form" : "employee-confirmation-page";
}
このシナリオでは、その検証のすべての結果をbindingResultに渡すので、そのフォームの検証結果をどう処理するかを決めるのはあなた次第です。
シナリオ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){
}
このシナリオでは、最初のシナリオのようにエラーを処理していませんが、フォームモデルの処理時に@Validがトリガーする例外を処理する別のメソッドにそれを渡します。これをチェックして、マッピングなどをどうするかを確認してください。
要約すると:何もしないで、独自の@Validよりそのトリガー検証JSR 303の注釈付きフィールド(の検証@NotNull、@email、@size、など...)、あなたはまだ何をすべきかの戦略を指定する必要があります上記の検証の結果とともに。
これでつまずくかもしれない人々のために何かをクリアすることができたと思います。
@Valid
ましたApplicationForm
が、それでも検証はdate
(として設定されたnull
)フィールドで実行されました。説明してください。