【Spring MVC】フォームの入力チェック方法(基本な使い方)

概要

Spring MVCにてフォームの入力チェックを行う方法についてまとめた。
入力チェックには、フォームのフィールドに入力チェック用のアノテーションを付与する。

今回は基礎的なBean Validationと、その実装であるHibernate Validatorが用意しているアノテーションの使用方法について紹介する。

 

前提

以下の記事の続きとなる。

あわせて読みたい

概要 Spring MVCにてフォームの入力チェックを行うための準備と入力チェックの全体像についてまとめた。 入力チェックにはBean Validationを使用する。 Bean Validationの機能を使用するためには、その実装[…]

【Spring MVC】フォームの入力チェック方法(準備)

 

入力チェック方法

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 文字列がEmail形式であること
@CreditCardNumber 文字列がクレジットカードナンバー形式であること
@Past 対象の日付や時間が過去であること

 

基本的な使い方

用途ごとに使用したいアノテーションをフィールドに付与する。
また、入力チェックエラー時のメッセージもプロパティに定義していく。

以下の例では各アノテーションの使用方法について抜粋して紹介する。

 

必須チェック

@NotNull

nullでないこと。
※テキストフィールドに適用させたい場合、StringTrimmerEditorで事前に空文字をnullにしておく必要がある。

 

FooForm.java


@NotNull
private String name;

messages_ja.properties


NotNull.java.lang.String={0}は必須項目です。

 

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(min = xxx): xxx文字以上であること
・@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

正規表現に一致すること。

@Pattern(regexp = ”xxx”): 正規表現チェック

FooForm.java


@Pattern(regexp = "^[a-zA-Z0-9]+$")
private String password;

 

上記は半角英数字のみ許容する正規表現。

messages_ja.properties


Pattern.java.lang.String={0}は半角英数字で入力してください。

 

数値の範囲チェック

@Minまたは@Max

数値が指定した数以下また以上であること。

@Min(xxx): xxx以上であること
@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

数値が指定した範囲であること。

@Range(min = xxx, max = yyy): xxx以上yyy以下であること

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}は過去日を入力してください。

 

スポンサーリンク