バリデーションの設定

今回のお題

今回のお題は、バリデーション(後編)です。

前回の作業で、データ型に対してはバリデーションとエラーメッセージが設定できました。

今回は、それ以外のバリデーション(文字数制限など)を設定していきます。

目次

ライブラリの追加

Spring Bootでは、ライブラリを追加することでバリデーションを簡単に実装可能です。

まずは、pom.xmlを編集してライブラリを追加します。

<dependencies>タグ内に以下を追加。

<dependency>

    <groupId>org.springframework.boot</dependency>

    <artifactId>spring-boot-starter-validation</artifactId>

</dependency>

アノテーションのimport

Spring Bootでは、フィールド名の前にアノテーションをつけることで、そのアノテーションに対応したバリデーションが設定されます。

 

今回は、フィールドの定義はSignupForm.javaで行っているので、まずはこのファイルに必要なアノテーションをimportします。

 

import javax.validation.constraints.NotBlank;

import javax.validation.constraints.NotNull;

import javax.validation.constraints.Min;

import javax.validation.constraints.Max;

import javax.validation.constraints.Pattern;

import javax.hibernate.validator.constraints.Length;

バリデーションの適用

次に、importしたアノテーションを用いてそれぞれのフィールドにバリデーションを設定していきます。

以下、代表的なアノテーションと使用例です。

@NotNull

指定したフィールドがnullでないことを要求します。

例)

@NotNull

private String userId;

 

@NotBlank

指定したフィールドがnull, 空文字、空白スペースでないことを要求します。

例)

@NotBlank

private string userName;

 

@Min, @Max

Integer型のフィールドに対して、最大値と最小値を設定します。

例)

@Min(20)

@Max(100)

private Integer age;

 

@Length

文字数の範囲を規定します。

例)

@Length(min = 4, max = 100)

private String password;

 

@Pattern

正規表現を用いてバリデーションをかけます。

例)

@Pattern(regexp = "^[a-zA-z-0-9]+$")

private String password;

 

これで、各フィールドに対してバリデーションが設定されました。

コントローラの編集

次に、コントローラを編集してバリデーションを有効にします。

やり方は簡単で、postSignupメソッドの引数部分を修正するだけです。

 

public String postSignup(Model model, Locale locale, @ModelAttribute @Validated SignupForm signupForm, BindingResult bindingresult){
.....以下略.......

}

 

@Validatedアノテーションをつけることで、postSignupメソッド内ではSignupFormクラスに対してバリデーションがかかります。

バリデーションメッセージの編集

最後にバリデーションメッセージの編集を行います。

以前にtypeMissmatchのエラーメッセージを記述するためにValidationMessages.propertiesとValidationMessages_en.propertiesを作成しました。

今回はそこにメッセージを追加していきます。

 

メッセージ例

NotBlank={0}は入力必須です。

NotNull={0}は入力必須です。

Max={0}は{1}以下で入力してください。

Min={0}は{1}以上で入力してください。

Length={0}は{2}文字以上{1}文字以下で入力してください。

 

メッセージを設定するためのルールは以下の3点です。

  • "バリデーション名 = そのバリデーションに設定するメッセージ"の形式で記述する。
  • {0}にはフィールド名、{1}以降にはそのバリデーションの引数が入る。
  • Lengthなどの引数が複数あるものに関しては、どちらが{1}に対応するかはバリデーションの側であらかじめ決まっている。
    Lengthでいえば、{1}は最大値で{2}が最小値。

 

また、この方法だとフィールド名に関しては変更されません。

例えば、userName→ユーザー名のように変更したければ、messages.propertiesを編集してください。