記事のターゲット
- 開発規約により1つの機能で作成できるFormの数が制限されている人
- Springのアノテーションについて多少理解している人
はじめに
Formにアノテーションを付けてControllerでValidationをするとForm全体に指定した検証を一度に行ってしまいます。特に問題ない場合の方が多いですが、特定のフィールドのみ検証したい場合もあると思います。
今回はその方法を紹介いたします。
方法


普通にValidationを行いたい場合は上記のようにFormを記述し、Controllerのメソッドの引数に@Validatedを追加して検証します。
しかしこれだと例えばemailだけチェックしないという操作はできません。なので以下の手順を行います。
step
1Formにinterfaceを定義する

ここで作成したインターフェースは検証用のグループ名として使用します。
step
2Formのフィールドをグループ分けし、Controllerで呼び出す

@NotBlankのような検証用のアノテーションの後に(groups= {EmailValid.class})のようにグループ分けしたいインターフェースを指定します。

そして、バリデーションをしたい部分で(NameValid.class)のように指定することでそのインターフェースでグループ分けしたフィールドのみを検証できるようになります。
今回の例でいうとfirstNameとlastNameのみチェックが入りemailの検証は行われません。
おわりに
今回の方法は機能追加等でFormを増やしたくない場合で使うことが多いかと思います。
上手く使えば便利な機能だと思いますのでぜひ使ってみてください。