Spring Boot チェック処理

Spring Bootのチェック処理を独自アノテーションで実行してみた

Spring Bootでのチェック処理は、よく使うものについては独自アノテーションで作成しておくことができる。今回は、独自アノテーションによるチェック処理を含むサンプルプログラムを作成してみたので、共有する。

前提条件

下記記事の実装が完了していること。

Spring Bootの相関チェックをform内で実行してみたSpring BootのWEB画面上での相関チェックは、form内で@AssertTrueアノテーションでも実行できることがわかったので...

サンプルプログラムの作成

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上図の赤枠のうち、「check」フォルダ内が、前提条件のプログラムから新規追加したプログラムで、他は変更したプログラムとなる。

まず、「CheckDate」アノテーションの内容は以下の通りで、ここでは@CheckDateアノテーション属性で指定する項目を指定している。さらに、@Repeatableアノテーションを利用することで、「CheckDate」アノテーションによるチェック処理を、1クラスで複数回実施できるようにしている。

また、「CheckDate」アノテーションでのチェック処理を実装しているプログラムは以下の通り。

上記プログラム内では、initializeメソッドでアノテーションで指定した項目名を取得している。また、isValidメソッドでは、アノテーション属性で指定した項目による日付チェック処理を行い、チェックエラーの場合にエラーメッセージを設定したり、赤反転するエラー項目の設定をしている。



さらに、「CheckDateAnnotation」アノテーションの内容は以下の通りで、「CheckDate」アノテーションによるチェック処理を、1クラスで複数回実施できるように設定している。

また、アノテーション属性で指定した日付(From, To)の大小関係をチェックするプログラムの内容は以下の通り。



さらに、アノテーション属性で指定した日付が未来日かどうかをチェックするプログラムの内容は以下の通り。



また、「DemoForm.java」の内容は以下の通りで、クラスに@CheckDateアノテーション、@FutureDateアノテーションを指定している。

さらに、「SearchForm.java」の内容は以下の通りで、クラスに@CheckDateアノテーション、@CheckFromToDateアノテーションを指定している。@CheckDateアノテーションに@Repeatableアノテーションを利用していたため、このクラスに@CheckDateアノテーションを複数回指定できるようになっている。



また、検索画面のHTMLの内容は以下の通り。

さらに、入力画面のHTMLの内容は以下の通り。

その他のソースコード内容は、以下のサイトを参照のこと。
https://github.com/purin-it/java/tree/master/spring-boot-web-check-original/demo

サンプルプログラムの実行結果

検索画面のエラーメッセージ表示内容は以下の通り。

1) 生年月日(From)の日付が不正な場合
検索画面のエラー1

2) 生年月日(To)の日付が不正な場合
検索画面のエラー2

3) 生年月日(From), 生年月日(To)の日付がいずれも不正な場合
検索画面のエラー3

4) 生年月日(From)>生年月日(To)の場合
検索画面のエラー4

また、入力画面のエラーメッセージ表示内容は以下の通り。

1) 生年月日が未入力の場合
入力画面のエラー1

2) 生年月日が年・月・日に未入力の項目がある場合
入力画面のエラー2

3) 生年月日が存在しない日付の場合
入力画面のエラー3

4) 生年月日が未来日の場合
入力画面のエラー4

要点まとめ

  • Spring Bootでよく使うチェック処理は、独自アノテーションにまとめておくことができる。
  • チェック処理を行う独自アノテーションは、アノテーションクラスとその実装クラスで構成され、アノテーションクラスでは属性を指定し、実装クラスでは具体的なチェック処理を定義する。