Spring Bootで登録画面を作るとき、入力チェックを付けて保存できれば完成、とは限りません。エラー文は読めるか。入力し直さずに修正できるか。画面とAPIで同じ業務ルールを守れるか。テストで何を確かめればよいか。実務では、そこまでが一つの改修です。
このガイドは、Javaのクラス・メソッドを読み、Spring BootのControllerを触ったことがある人向けです。フォームの入力から、エラー表示、Serviceへの受け渡し、MockMvcでの確認までを、既存の記事で順に追えるよう整理しました。
このガイドのゴール
「動きました」で終わらせず、どんな入力を受け、失敗したら何を返し、何をテストしたかを説明できること。コードの詳しい実装は各記事で扱い、ここでは読む順と確認する問いを示します。
読む順は「入力の約束→再表示→業務判断→テスト」
| 順番 | この段階で答えたい問い |
|---|---|
| 1.入力の約束 | 何をFormで受け取り、どの制約を検証する? |
| 2.エラー時の再表示 | エラー文と入力値を、利用者にどう返す? |
| 3.業務判断の分担 | どこまでが入力形式で、どこからが業務ルール? |
| 4.修正の確認 | 画面・Service・HTTP応答の何をテストに残す? |
各記事には別々の最小サンプルがあります。同じアプリを順に完成させる連載ではないため、クラス名やURLを混ぜず、各記事の確認環境と手順に合わせて試してください。主にSpring MVC+Thymeleafを扱い、WebFluxやフロントエンド別構成の全体設計は対象外です。
1.Formの入力項目と、検証する制約を決める
最初に決めるのはアノテーションの種類ではなく、「この画面から何を受け取ってよいか」です。必須・文字数・形式を整理し、登録と更新で違う条件が本当に必要かを確認します。
ここでの確認:各入力項目について「受け取る型・制約・Serviceへ渡すか」を説明できれば、次へ進めます。既存機能の改修なら、画面だけを見て決めず、Controllerが受け取るFormも照合してください。
2.入力エラーでも、利用者が修正を続けられる画面にする
チェックで止めることと、直せる画面を返すことは別です。メッセージが出ても入力値が消えれば再入力が必要ですし、値が残っても理由が分からなければ修正できません。この二つを分けて確認します。
ここでの確認:必須項目を一つ空にして送信し、それ以外の入力値を保持したまま修正できるかを見ます。正常入力だけでなく、失敗した後の画面も改修の成果物に含めてください。
3.ControllerとServiceで、入力形式と業務ルールを分ける
必須やメール形式を満たしていても、「既に登録されているメールだから受け付けられない」という判断は残ります。画面とAPIの両方に同じ判定を書き始めたら、置き場所を見直すタイミングです。
ここでの確認:形式エラーと業務エラーで、誰が判断し、誰が利用者へ返すかを説明します。この記事の最小サンプルは実DBの同時登録まで保証するものではありません。一意制約や競合時の扱いは別途必要です。
4.MockMvcで「通ったか」だけでなく、返した内容を確かめる
MockMvcのPOSTが403になるなら、入力チェックより手前のSecurityで止まっている可能性があります。一方、フォームの入力エラーを画面へ返す処理は200になることもあります。数字だけを見て、すべての入力エラーを400にそろえる必要はありません。
ここでの確認:ステータスだけでなく、エラー項目、返す画面、Serviceを呼ばない分岐も見ます。表示文言や入力値の保持は、2で紹介した各記事のHTML検証につなげてください。
Controllerへ届かず400になるときの補助記事
レビューに出す前に、三つのケースを説明する
- 正常な入力:何をServiceへ渡し、どの画面・応答へ進むか。
- 形式が不正な入力:どの項目にエラーを出し、入力値をどう保持するか。
- 形式は正しいが業務上受け付けられない入力:どこで判断し、保存せずどう知らせるか。
この三つは最低限の整理であり、網羅的なテスト一覧ではありません。項目の境界値、権限、競合など、変更した仕様に応じて追加します。まずは「今回何を直し、その結果を何で確かめたか」を、実行結果と一緒に伝えられる状態にしましょう。
手元で確かめる、フォーム・入力検証サンプル
この記事のサンプルコード
フォームの入力からテストまで、実行して確かめる
入力チェック、ControllerとServiceの分担、Thymeleafの再表示、MockMvcとSecurityを、独立した4つのサンプルで確認できます。
- 4つの独立サンプル
- 58ケース検証済み
- MITライセンス
用意するものJava 17・Maven 3.9系
ZIPにはSpring・Mockitoの全5サンプルが入っています。解凍後、ルートのREADME.mdからspring/form-validation/の実行手順へ進んでください。初回は依存ライブラリの取得にインターネット接続が必要です。
外部DBやAPIキーは不要です。実ブラウザー、実DB、同時実行、実ログイン・パスワード照合は検証対象外です。
基礎から補いたい場合は、ブログの本棚や各記事の参考書紹介も利用してください。先に手元の課題を試し、入力処理・設計・テストのどこを深めたいかを決めると、次に読む本を選びやすくなります。
前提と公式資料
本ガイドが中心に案内する実装例は、Java 17・Spring Boot 3.5系・Spring Framework 6.2系で確認したものです。具体的な依存関係と検証範囲は各記事に記載しています。Boot 2系のjavax.validationと、3系以降のjakarta.validationを混在させず、利用中の版と照合してください。






