Tech Sketch Bucket of Technical Chips by TIS Inc.

Spring MVCでバリデーションを行う

Pocket

この記事はeXcale Developer's Blogから移転されたものです。

eXcale開発チームの西谷です。
今日はSpring MVCのバリデーションについてです。
Spring MVCではJSR303に対応したバリデーションが行えます。
JSR303とは簡単に言うとJavaBeans用のバリデーションの仕様です。詳細はこちらを参照ください。
これによりアノテーションによってバリデーションを行うことができます。
今回はSpring MVCで開発したWebアプリケーションのコントローラの入力値(フォームなど)に対してバリデーションを行う方法です。
JSR303の参照実装はいくつかありますが今回はHibernate Validatorを使用したいと思います。

というわけで早速やってみたいと思います。
なお、サンプルはRooで作ったものをベースにしてます。Rooで作成した場合には自動的にバリデーションが使えるように設定されていますがRooを使っていない場合はバリデーションを有効にするためにSpring MVCの設定ファイルに以下の記述をした上で必要なjarファイルを参照できるようにしておいてください。今回はHibernate Validatorを利用するのでvalidation-api-1.0.0.GA.jarとhibernate-validator-4.2.0.Final.jarです。

jarの管理にmavenを使っている場合はpom.xmlに以下を追記してください。

コントローラ:

モデル:

これだけでバリデーションがかけられます。
モデルの方は定義したフィールドにアノテーションでバリデーション条件を指定するだけです。
その上で、このモデルを使用するコントローラ側でモデルを引数に取る際に@Validを指定します。なお、@ValidとセットでBindingResultをコントローラの引数として取る必要があります。BindingResultは@Validを指定した引数の直後に定義する必要があります。このBindingResultにはバリデーション結果のみが格納されます。
従ってバリデーション結果で後続処理のハンドリングをしたい場合はBindingResult.hasError()で結果をチェックしてfalseの場合はエラー画面を表示するなどします。
今回は簡単な紹介ですが実際にはバリデーションのグルーピングやカスタムバリデーションの実装も可能です。
このあたりの詳細はSpringの公式ドキュメントを参照してください。

以上、簡単にSpring MVCでのバリデーション実装方法でした。

エンジニア採用中!私たちと一緒に働いてみませんか?