Spring Boot

Spring Bootでチェック処理にバリデーターを利用してみた

これまでは、Spring BootのWEB画面上での相関チェックをサービスクラスで実装してきたが、特定のFormオブジェクトのチェック処理を集約したバリデータを利用すると、サービスクラスからチェック処理を切り離すことができることがわかったので、そのサンプルプログラムを共有する。

前提条件

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

SQLログ出力内容をカスタマイズしてみた今回は、SQLログ出力内容をカスタマイズし、SQLの実行時間や呼出メソッドをSQLログに出力してみたので、そのサンプルプログラムを共有す...

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

作成したサンプルプログラムの構成は以下の通り。
サンプルプログラムの構成
なお、上図の赤枠のうち、「DemoFormCheckValidator.java」「SearchFormCheckValidator.java」が新規で作成したプログラムで、他は変更したプログラムとなる。

「DemoFormCheckValidator.java」「SearchFormCheckValidator.java」の内容はそれぞれ以下の通りで、Validatorインタフェースを継承し、supportsメソッドでチェック対象となるクラスかどうかをチェックし、validateメソッドでチェック処理を実装している。

また、「DemoController」クラスの内容は以下の通り。

@InitBinderアノテーションを利用してチェック処理オブジェクト「DemoFormCheckValidator.java」「SearchFormCheckValidator.java」を「WebDataBinder」オブジェクトに設定することで、それぞれのFormオブジェクトの入力チェックのタイミングで、それぞれのチェック処理が呼ばれるようにしている。

さらに、searchメソッド、confirmメソッドが呼ばれたタイミングで、それぞれのFormオブジェクトのチェック処理が呼ばれるよう、@ValidatedアノテーションをFormオブジェクトの引数に付与している。

なお、引数のBindingResultは、@Validatedアノテーションを付与した引数の直後に記載する必要がある。詳細は以下を参照のこと。
https://qiita.com/orangeeeee/items/334cf4b7042efbce9265

さらに、「DemoService.java」「DemoServiceImpl.java」は以下の通りで、それぞれのFormオブジェクトのチェック処理を削除する対応を行っている。

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

入力画面のチェック処理については、下記記事の「完成した画面イメージの共有」と同等の実行結果となる。

Spring BootのWEB画面上でチェック処理を実装してみた(完成イメージ編)今回は、以前作成した、入力画面・確認画面・完了画面の3画面を含み、HTMLオブジェクトとしてテキストボックス・セレクトボックス・ラジオボ...

さらに、検索ボタンでエラーが発生した場合は、例えば以下のような画面表示となる。
検索画面のエラー表示

要点まとめ

  • 特定のFormオブジェクトのチェック処理を集約したバリデータを作成するには、Validatorインタフェースを継承し、supportsメソッドでチェック対象となるクラスかどうかをチェックし、validateメソッドでチェック処理を実装すればよい。
  • 特定のFormオブジェクトの入力チェックのタイミングで作成したバリデータを呼び出すには、@InitBinderアノテーションを利用してWebDataBinderにバリデータを登録する。