概要
Spring MVCにてフォームの入力チェックを行う方法についてまとめた。
入力チェックには、フォームのフィールドに入力チェック用のアノテーションを付与する。
今回は基礎的なBean Validationと、その実装であるHibernate Validatorが用意しているアノテーションの使用方法について紹介する。
前提
以下の記事の続きとなる。
概要 Spring MVCにてフォームの入力チェックを行うための準備と入力チェックの全体像についてまとめた。 入力チェックにはBean Validationを使用する。 Bean Validationの機能を使用するためには、その実装[…]
入力チェック方法
Bean ValidationとHibernate Validatorが用意しているアノテーションについて使用方法を紹介する。
入力チェック用のアノテーション
それぞれが用意している基礎的なアノテーションは以下となる。
※Hibernate ValidatorはBean Validationが用意しているアノテーションよりも便利なものが増えたというイメージ
種類 | アノテーション | 意味 | 補足説明 |
---|---|---|---|
Bean Validation | @NotNull | nullでないこと | 空文字はOKと判定する |
@Max | 数値が指定した数以下であること | – | |
@Min | 数値が指定した数以上であること | – | |
@Size | 文字列やコレクションが指定した範囲の大きさであること | – | |
@AssertTrue | trueであること | – | |
@AssertFalse | falseであること | – | |
@Pattern | 正規表現に一致すること | – | |
Hibernate Validator | @NotEmpty | 文字列やコレクションがnullまたは空文字でないこと | 空文字はNGと判定する |
@NotBlank | 文字列がnullまたは空文字、あるいは空白スペースのみでないこと | 半角スペースのみはNGと判定する | |
@Length | 文字列が指定した範囲の長さであること | – | |
@Range | 数値が指定した範囲であること | – | |
文字列がEmail形式であること | – | ||
@CreditCardNumber | 文字列がクレジットカードナンバー形式であること | – | |
@Past | 対象の日付や時間が過去であること | – |
基本的な使い方
用途ごとに使用したいアノテーションをフィールドに付与する。
また、入力チェックエラー時のメッセージもプロパティに定義していく。
以下の例では各アノテーションの使用方法について抜粋して紹介する。
必須チェック
@NotNull
nullでないこと。
※テキストフィールドに適用させたい場合、StringTrimmerEditorで事前に空文字をnullにしておく必要がある。
FooForm.java
@NotNull
private String name;
messages_ja.properties
NotNull.java.lang.String={0}は必須項目です。
フォーム名はプロパティに以下のように定義する。
messages_ja.properties
fooForm.name=お名前
@NotBlank
文字列がnullまたは空文字、あるいは空白スペースのみでないこと。
※半角スペースのみの場合はエラーになるが、全角スペースのみだとエラーにならない
FooForm.java
@NotBlank
private String name;
messages_ja.properties
NotBlank.java.lang.String={0}は必須項目です。
@NotEmpty
文字列やコレクションがnullまたは空文字でないこと。
FooForm.java
@NotEmpty
private String name;
messages_ja.properties
NotEmpty.java.lang.String={0}は必須項目です。
桁数(サイズ)チェック
@Size
文字列やコレクションが指定した範囲の大きさであること。
※Lengthも同様の使い方
・@Size(max = xxx): xxx文字以内であること
FooForm.java
@Size(min = 2, max = 20)
private String name;
messages_ja.properties
Size.java.lang.String={0}は{2}文字以上{1}文字以内で入力してください。
文字種チェック
@Pattern
正規表現に一致すること。
FooForm.java
@Pattern(regexp = "^[a-zA-Z0-9]+$")
private String password;
上記は半角英数字のみ許容する正規表現。
messages_ja.properties
Pattern.java.lang.String={0}は半角英数字で入力してください。
数値の範囲チェック
@Minまたは@Max
数値が指定した数以下また以上であること。
@Max(yyy): yyy以下であること
FooForm.java
@Min(1)
@Max(100)
private Integer age;
messages_ja.properties
Min.java.lang.Integer={0}は{1}以上で入力してください。
Max.java.lang.Integer={0}は{1}以内で入力してください。
@Range
数値が指定した範囲であること。
FooForm.java
@Range(min = 1,max = 100)
private Integer age;
messages_ja.properties
Range.java.lang.Integer={0}は{2}以上{1}以内で入力してください。
過去日チェック
@Past
対象の日付や時間が過去であること。
FooForm.java
@Past
@DateTimeFormat(pattern = "yyyy-MM-dd")
private Date birthday;
messages_ja.properties
Past.java.util.Date={0}は過去日を入力してください。