親バカエンジニアのナレッジ帳

webのエンジニアをやっており、日頃の開発で詰まったことや書き残しておきたいことを載せています。

SpringBootのFormバリデーションで、Listを使って別々の項目に同じチェック

SpringBootのFormで使われるList

SpringBootのFormバリデーションで独自バリデーションを作成し、
適用している人にとってはよく見かけるListですが、これの使い道は知ってますか?

例)

public @interface List {
	TestValidate[] value();
}

一例ですが、例えば以下のようにElementTypeをTYPEにして、
複数項目で自作のバリデーションを行いたい場合に有効です。

@Target({ElementType.TYPE})

複数項目で自作のバリデーション例
例えば以下のような定義があった場合を考えてみましょう。

public class TestForm implements Serializable {

	private Integer test1;

	private Integer test2;

}

ここで、「test1」と「test2」のフィールドはTYPE型の同じ種類のバリデーションを行うカラムとします。
どうすればよいでしょう?

ここでListの出番です。
以下のように定義してしまえば、2つのカラムの両方に対してバリデーションをかけることが可能になるのです。

@TestValidate.List({
   @TestValidate(field = "test1"),
   @TestValidate(field = "test2")})
public class TestForm implements Serializable {

	private Integer test1;

	private Integer test2;

}

他にも使い方は色々あると思いますが、今回は一例として使い方を挙げてみました。