Spring MVCで使う @Valid と @NotNull の基礎(Spring Bootフォームチェックの基本)を初心者向けに解説
新人
「Spring MVCでフォームを作ったんですが、入力チェックって必ず必要なんでしょうか?」
先輩
「必要ですね。フォームはユーザが自由に入力できるので、想定外の値が送られてくることがよくあります。」
新人
「全部 if 文でチェックしないといけないんですか?」
先輩
「Spring MVCでは @Valid や @NotNull を使って、入力チェックを仕組みとして任せることができます。」
1. フォーム入力チェックとは何か(なぜ必要なのか)
フォーム入力チェックとは、Web画面から送信された入力内容が正しいかどうかを確認する処理のことです。 Spring MVCを使ったWeb開発では、ユーザが入力した値をそのまま処理に使うのはとても危険です。 なぜなら、空のまま送信されたり、想定していない文字が入力されたりする可能性があるからです。
例えば、名前入力欄が空のまま登録されたり、数値を入力する欄に文字が入力されると、 アプリケーションの中でエラーが発生したり、正しく処理できなくなります。 このようなトラブルを防ぐために、入力チェックは必須の仕組みになります。
Spring MVC フォーム バリデーションを使うことで、 入力チェックを毎回手作業で書かなくても、一定のルールに従って自動的に確認できます。 初心者のうちは「入力は信用しない」という考え方を持つことが大切です。
2. Spring MVCで行うフォームバリデーションの全体像
Spring MVCにおけるフォームバリデーションは、 フォーム表示、入力、送信、入力チェック、画面表示という流れの中で動作します。 HTMLは入力欄を表示する役割を持ち、実際の入力チェックはサーバ側で行われます。
pleiadesで作成したGradleプロジェクトでは、 特別な設定をしなくてもSpring MVCの標準機能としてフォームバリデーションを利用できます。 コントローラがフォーム入力を受け取り、その直後に入力チェックが行われる仕組みです。
フォームの入力値は、専用のクラスにまとめて受け取られます。 そのクラスに対して「どんな値を許可するか」というルールを定義することで、 Spring MVC バリデーションが自動的に動作します。
@Controller
@RequestMapping("/sample")
public class SampleController {
@GetMapping("/input")
public String input() {
return "sampleInput";
}
@PostMapping("/submit")
public String submit(SampleForm form) {
return "sampleResult";
}
}
この例では、フォーム画面を表示し、送信された入力を SampleForm クラスで受け取っています。 ここにバリデーションの仕組みを追加することで、入力チェックが実現できます。 Spring MVC フォーム バリデーション 基本の考え方は、この流れを理解することから始まります。
3. @Valid と @NotNull が何のために存在するのか
@Valid と @NotNull は、Spring MVCでフォームバリデーションを行うための重要なアノテーションです。 @Valid は「このフォームに対して入力チェックを実行する」という合図の役割を持っています。 一方、@NotNull は「この項目は必ず値が必要」という入力ルールを表します。
つまり、@Valid はバリデーション全体を開始するためのスイッチのような存在で、 @NotNull は個々の入力項目に対する具体的なチェック内容になります。 この二つを組み合わせることで、Spring MVC フォーム バリデーションが成立します。
次の例は、フォーム入力を受け取るクラスに @NotNull を設定した基本的な例です。 初心者はまず「必須入力を防ぐための仕組み」として理解すると分かりやすくなります。
public class SampleForm {
@NotNull
private String name;
@NotNull
private String email;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
このように @NotNull を設定することで、 入力が空のまま送信された場合にエラーとして扱われます。 これを @Valid と組み合わせてコントローラで受け取ることで、 Spring MVCが自動的に入力チェックを行います。
@Valid と @NotNull は、入力チェックを仕組みとして任せるための基本要素です。 Spring MVC フォーム バリデーションを学ぶうえで、 まずはこの二つの役割を正しく理解することが重要になります。
4. @Valid を使ったフォームバリデーションの基本的な流れ
ここからは、@Valid を使ったフォームバリデーションが 実際にどのような流れで動いているのかを詳しく見ていきます。 初心者が混乱しやすいポイントは、 「@Valid はどこで動いているのか」という点です。
Spring MVCでは、フォームの流れは フォーム表示 → 入力 → 送信 → @Valid によるチェック → 画面表示 という順番で処理されます。 @Valid は、この中の「送信された直後」に自動で動作します。
つまり、ユーザが送信ボタンを押し、 @PostMapping のメソッドが呼び出された瞬間に、 Spring MVCが内部で @Valid を検知し、 フォームクラスに設定されたバリデーションルールを確認します。
@PostMapping("/submit")
public String submit(@Valid SampleForm form) {
return "sampleResult";
}
このように、引数に @Valid を付けるだけで、 フォームに対する入力チェックが自動的に開始されます。 コントローラの中で明示的に 「ここでチェックする」と書く必要はありません。
Spring MVC @Valid 仕組みの大きな特徴は、 開発者が意識しなくても、 フォーム送信の流れの中に自然に組み込まれている点です。 初心者はまず、 「@Valid は送信直後に自動で動く」 というイメージを持つと理解しやすくなります。
5. @NotNull とは何か(何をチェックしているのか)
次に、@NotNull が何をチェックしているのかを整理しましょう。 @NotNull は、その名前の通り 「値が存在しているかどうか」を確認するためのアノテーションです。
フォーム入力では、 ユーザが何も入力せずに送信してしまうケースがよくあります。 このとき、サーバ側では値が null として扱われることがあります。 @NotNull は、こうした状態を防ぐために使われます。
つまり @NotNull は、 「この項目は必ず入力されていなければならない」 という最低限のルールを表しています。 Spring MVC フォームチェックの中でも、 最も基本的で重要な入力チェックの一つです。
public class SampleForm {
@NotNull
private String name;
@NotNull
private String email;
// getter / setter
}
この設定があることで、 name や email が未入力のまま送信された場合、 バリデーションエラーとして検知されます。 もし @NotNull がなければ、 空の入力でもそのまま次の処理に進んでしまいます。
@NotNull フォームチェックは、 入力ミスや未入力によるトラブルを防ぐための 最初の防御線だと考えると分かりやすくなります。 初心者はまず、 「必須項目を守るための仕組み」 として理解しておきましょう。
6. @Valid と @NotNull が連携して動く仕組み
@Valid と @NotNull は、それぞれ単体で動くものではなく、 連携して初めてフォームバリデーションとして機能します。 この関係を理解することが、 Spring MVC バリデーション理解の重要なポイントです。
まず @Valid は、 「このフォームに対してバリデーションを実行する」 という合図の役割を持っています。 そして @NotNull は、 「具体的に何をチェックするか」 を定義するルールになります。
フォームが送信されると、 Spring MVCは @Valid を見つけ、 対象となるフォームクラスを確認します。 その中に @NotNull が付いた項目があれば、 そのルールに従って入力チェックを行います。
@PostMapping("/submit")
public String submit(@Valid SampleForm form) {
// @Valid により @NotNull のチェックが実行される
return "sampleResult";
}
エラーがない場合は、 入力内容が正しいと判断され、 そのまま結果画面へ進みます。 一方で、@NotNull に違反する入力があった場合は、 バリデーションエラーが発生します。
この「エラーがある場合」と「ない場合」の分岐こそが、 Spring MVC @Valid 仕組みの中心です。 フォームバリデーションは、 単なる入力チェックではなく、 画面遷移を制御する重要な役割も持っています。
中盤では、 @Valid がバリデーションを開始し、 @NotNull が具体的なチェックを行う、 という役割分担を理解することが大切です。 この仕組みを押さえておくことで、 次に学ぶエラー表示や画面制御が よりスムーズに理解できるようになります。
7. バリデーションエラーを画面に表示する考え方
フォームバリデーションを実装するうえで重要なのが、 バリデーションエラーをどのように画面へ表示するかという考え方です。 Spring MVCでは、入力チェックはサーバ側で行い、 HTMLはその結果を表示する役割を担当します。
つまり、HTMLは「入力欄を表示する」「エラーメッセージを表示する」 という見た目の役割に集中し、 入力が正しいかどうかの判断は @Valid によって サーバ側で行われます。 この役割分担を理解することがとても大切です。
バリデーションエラーが発生した場合、 コントローラは再度入力画面を表示し、 エラー情報を Model に載せて画面へ渡します。 Thymeleaf はその情報を使って、 エラーメッセージを画面に表示します。
@PostMapping("/submit")
public String submit(@Valid SampleForm form, Model model) {
model.addAttribute("form", form);
return "sampleInput";
}
このように、エラーがある場合は 再び入力画面に戻ることで、 ユーザは自分の入力内容を確認しながら修正できます。 フォーム バリデーション エラー表示は、 ユーザに優しい画面を作るための重要な仕組みです。
Spring MVC @Valid 基本の考え方として、 「エラーは隠さず、分かりやすく画面に伝える」 という意識を持つことが、初心者にはとても重要になります。
8. @Valid と @NotNull を使うことで防げるトラブルの例
@Valid と @NotNull を正しく使うことで、 さまざまなトラブルを未然に防ぐことができます。 これは単なる入力チェック以上の意味を持っています。
例えば、必須項目が未入力のまま登録されてしまうと、 後続の処理で想定外のエラーが発生する可能性があります。 データベースへの登録時にエラーが出たり、 画面表示で例外が発生することもあります。
@NotNull 入力チェックを行っていれば、 こうした問題はフォーム送信の段階で止めることができます。 これにより、アプリケーション内部に 不正なデータが入り込むのを防げます。
また、@Valid によるサーバ側チェックは、 ユーザが意図的に不正な値を送信した場合にも有効です。 HTMLの入力制御だけでは防げないケースでも、 サーバ側のバリデーションが最後の砦として機能します。
このように、Spring MVC @Valid 基本を理解し、 @NotNull と組み合わせて使うことで、 安全で信頼性の高いフォーム処理が実現できます。 フォームバリデーションは、 アプリケーション全体を守るための重要な仕組みです。
9. 初心者がやりがちなミスと注意点
フォームバリデーションを学び始めた初心者が、 よくやってしまうミスもいくつかあります。 ここでは代表的な注意点を整理しておきましょう。
一つ目のミスは、 @NotNull を付けたのに @Valid を付け忘れることです。 @NotNull だけではバリデーションは実行されません。 @Valid がなければ、チェック自体が動かない点に注意が必要です。
二つ目は、 「HTMLで制御しているから大丈夫」と考えてしまうことです。 クライアント側の制御は簡単に回避できるため、 必ずサーバ側で @Valid によるチェックを行う必要があります。
三つ目は、 エラー時の画面遷移を考えずに実装してしまうことです。 バリデーションエラーが出たときは、 入力画面に戻して修正させる、 という流れを意識して設計する必要があります。
これらのミスを防ぐためには、 「@Valid は必ず付ける」 「入力チェックはサーバ側で行う」 「エラー時の画面表示まで考える」 という三点を意識することが大切です。
10. 最初に覚えるべきポイント整理
ここまで、Spring MVCで使う @Valid と @NotNull の基礎について解説してきました。 最後に、初心者が最初に覚えるべきポイントを整理しておきましょう。
- フォーム入力は必ずチェックが必要である
- @Valid はバリデーションを開始する合図である
- @NotNull は必須入力を守るための基本ルールである
- 入力チェックは必ずサーバ側で行う
- HTMLは入力欄とエラー表示を担当する
- エラーがある場合は入力画面に戻す設計が重要である
Spring MVC @Valid 基本と @NotNull 入力チェックを正しく理解することで、 フォーム処理の安全性と分かりやすさが大きく向上します。 まずは今回の内容をしっかり押さえ、 安全なフォームバリデーションの土台を作っていきましょう。