EclipseによるSpringBoot④Validation

EclipesによるSpringBootの連載の続きです。
①コントローラ
②Thymeleaf
③MyBatis
④Validation(今回)

今回のテーマは、Validationです。バリデーションと呼びます。
Validationは、入力画面のチェック機能です。
Springフレームワークの機能としてValidationの機能を持っています。

修正/新規のJavaソース資源のディレクリ構成を示します。

新規/修正のリソース資源ディレクトリ構成を示します。

修正/新規の資源一覧を以下に示します。

#ファイル名概要種別修正/新規
1build.gradleビルド設定gradle修正
2AddressController.java住所コントローラクラスjava修正
3InputForm.java入力フォームクラスjava新規
4List.html住所一覧画面タイムリーフThymeleaf修正
5Input.html入力画面タイムリーフThymeleaf新規
6Confirm.html確認画面タイムリーフThymeleaf新規
作成手順 ①build.gradleのvalidationの追加
②ソースの作成
 ②-1 住所コントローラクラス
   新規作成ボタン押下時のメソッド作成
 ②-2 住所コントローラクラス
   確認画面用のメソッド作成
 ②-3 入力フォームクラスの作成
③Thymeleaf(タイムリーフ)の作成
 ③-1 住所一覧画面に新規作成ボタン追加
 ③-2 住所入力画面作成
 ③-3 住所確認画面作成

①build.gradleのvalidationの追加

validation機能を追加します。
今回は、入力画面を作成するので、チェックする機能が必要になるため、この機能を追加します。
最初のSpring Bootスターターの依存関係の設定で、validationに設定していれば、
この設定は不要になります。
未設定の場合でも後から追加したい場合は、ここに追加すれば使用可能になります。

②ソースの作成
 ②-1 住所コントローラクラス
   新規作成ボタン押下時のメソッド作成
行数説明
53@RequestMappingは、Get/Postのどちらも受付可能なアノテーションになります。
波線が出ていますが、特に問題があるわけではありません。
56入力フォーム(InputForm)のインスタンスを行っています。
58~60性別表示用のマップの設定を行っています。
0:男、1:女を表示します。
61性別マップをinputFormオブジェクトに設定しています。
62inputFormオブジェクトをThymleafに設定しています。
64Thymleaf名をinputに設定しています。

②-2 住所コントローラクラス

確認画面用のメソッド作成

行数説明
70@RequestMappingは、Get/Postのどちらも受付可能なアノテーションになります。
71@Validated @ModelAttributeのアノテーションは、バリデーションチェックを行う場合に付けます。
72BindingResult resultは、バリデーション結果を格納します。
@ReauestParamのアノテーションは、リクエストのパラメータになります。
今回のケースでは、戻るボタン(back)と次へボタン(next)の判別に使用しています。
74~77idが"back"(戻るボタン)の場合、リダイレクトで一覧画面に戻る。
リダイレクトよる一覧画面で戻るのは、コントローラのlistメソッドを実行後に、一覧画面に遷移することです。もし、リダイレクトをしないと、listメソッドが実行されないので、一覧の取得処理がないので、空の画面が表示します。
80~92バリデーションチェックにより、エラーがある場合は、入力画面に戻る。
inputFormオブジェクトに、性別マップの再設定が必要になります。
94Thymeleaf名をconfirmに設定します。

 ②-3 入力フォームクラスの作成

Validationチェック用のアノテーションを以下に示します。

Validationチェック用のアノテーション機能
@NotNullNULLを禁止します
@NotBlank空文字を禁止します
@Size(MAX=数字)最大文字数以下であることをチェックします
@Emailメールのフォーマットチェックをします
行数説明
10@Dataは、lombokのアノテーションになります。getter、setterが使用できるようになります。
16~19名前(name)で、バリデーションチェックで、NotNull、NotBlank、Max文字数30以下を設定しています。
21~24住所(address)で、バリデーションチェックで、NotNull、NotBlank、Max文字数30以下を設定しています。
行数説明
26~29電話番号(tel)で、バリデーションチェックで、NotNull、NotBlank、Max文字数30以下を設定しています。
31~33メールアドレス(mail)で、バリデーションチェックで、メールのフォーマットチェック、Max文字数30以下を設定しています。
35~36職業(job)で、バリデーションチェックで、Max文字数30以下を設定しています。

③Thymeleaf(タイムリーフ)の作成
 ③-1 住所一覧画面に新規作成ボタン追加

行数説明
8th:action="@{/input}"は、コントローラクラスの「/input」メソッドにリクエストを飛ばします。

36行目:新規作成ボタンを追加しています。

 ③-2 住所入力画面作成

行数説明
8Validationチェックで、エラーがある場合、エラー表示します。
9th:action="@{/confirm}"はリクエストの宛先を設定します。
th:object="${inputForm}"はオブジェクト名を設定しています。
11名前に関するバリデーションチェックで、エラーの場合、エラーメッセージを表示します。
13input type="text"タグは、テキストボックスのタグになります。
th:field="*{name}"は、inputFormオブジェクトに含まれるnameメンバ変数を設定しています。
15~29名前と同様に、住所、電話番号、メールアドレス、職業の設定をしています。
行数説明
31~36性別のラジオボタンの設定をします。
37戻るボタン(back)の設定をします。
38次へボタン(next)の設定をします。

 ③-3 住所確認画面作成

行数説明
8th:action="@{/register}"は、宛先の設定をします。
登録コントローラに向けの設定です。今回は登録コントローラの作成はしません。
th:Object="${inputForm}"オブジェクトの設定です。
11~29入力画面で設定した住所情報を表示をします。
行数説明
31戻るボタン(back)の設定をします。
32登録ボタン(register)の設定をします。
33~38input type="hidden"は、隠し項目用のタグになります。
このような隠し項目をなぜ使うかといいますと、表示させたくない値を持つ必要がある場合に使用します。
今回のケースは、まさにそれで、次の登録処理のために、値を保持しておきたいからです。
ちなみに、テーブルやテキストに表示用の値を次の登録処理に使うことはできません。

これで、準備完了です。
では、動かしてみましょう。
H2データベースを起動して、Bootダッシュボードから起動しましょう。 URLに、localhost:8080/listと打つと、
住所一覧画面が表示され、新規作成ボタンが表示されます。
新規作成ボタンを押下します。
入力画面に遷移します。
わざと、何も入力せずに次へボタンを押してみましょう。
Validation機能のテストのためです。
エラーメッセージが表示して、入力画面に戻されています。
これは、Validationの機能がちゃんと機能していることが確認できました。

次は、ちゃんと入力して、次へボタンを押下してみましょう。

今度は、ちゃんと確認画面に遷移して、入力した情報が表示されています。

☆まとめ☆ 今回は、Validation(バリデーション)について、学びました。
入力画面でのチェックを自動的に行ってくれます。
Springのフレームの機能で行ってくれるので、コードを書く必要がないので、
とても効率的です。

Follow me!