見出し画像

Spring Bootでカスタムバリデーションメッセージをプロパティファイルから読み出す

■ 一般的なカスタムエラーメッセージの利用方法

例えば次のバリデーションを使っているときを想定する。

import javax.validation.constraints.Email;


中略... 


@Email
private String mail;

@Emailのバリデーションを利用していることを想定する。
通常バリデーションメッセージを書き換える場合は次のようにクラス内に記述する。

// 普通のやり方
@Email(message = "Emailを入力してください")
private String mail;

「@〇〇」の後ろで、messageプロパティに値を代入させるように記述する。
この記述方法を取ることで、分かりやすく簡単に記述できる。記述力が多すぎない場面では有効に機能するが、しかし同様のバリデーションメッセージを大量のクラスに記述する場合はプロパティファイルなどを利用しエラーメッセージを一元管理することが望ましい。この投稿ではプロパティファイルを用いてカスタムエラーメッセージを一元管理する方法を記述する。


■ カスタムエラーメッセージをプロパティファイルを使って一元管理する

上記のコードにおいて、カスタムエラーエラーメッセージを変更する方法を記述する。おおよその流れは次の通りである。

1.  resources/の配下にプロパティファイルを作成するValidationMessages.propertiesを作成する
2. プロパティファイルに記述する
3. クラスファイル内のmessageプロパティを消す


1.  resources/の配下にプロパティファイルを作成する
カスタムエラーメッセージをプロパティファイルで一元管理する際には「ValidationMessages.properties」という名前のファイルを resources/の配下に作成する。

画像2


2. プロパティファイルに記述する
次に作成したプロパティファイルの中身を記述する。
例えば今回の例の@Emailであれば次のように記述する

javax.validation.constraints.Email.message = Email\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044

「Email\u3092\u5165\u529b\u3057\u3066\u304f\u3060\u3055\u3044」は「Emailを入力してください」という意味である。

書き方
import文に記述してあるクラスファイルの末尾に「.message」を追記し、そこに表示させたいメッセージを代入させる。日本語などマルチバイト文字を表示させる場合はユニコードエスケープした文字を入力させる必要がある。日本語をユニコードエスケープ文字に変換してくれるツールを下記に一つ紹介する。因みにダブルクォーテーションなどは不要である。

文章をユニコードエスケープしてくれるツール例
https://tech-unlimited.com/escape-unicode.html

3. クラスファイル内のmessageプロパティを消す
元々のクラスに直接記述していたカスタムエラーメッセージは削除しておく。Springの仕様上、クラスファイルに直接記述されたメッセージの方が優先されるためである。

// messageを削除する
@Email(message = "Emailを入力してください")
↓
@Email


あとはアプリケーションを起動させ動作を確認する。


■ おまけ

今回は@Emailを例に紹介したが、その他のバリデーションでも可能である。
他にも、例えば@NotEmptyなら次のようになる。

javax.validation.constraints.NotEmpty.message = \u5165\u529b\u306f\u5fc5\u9808\u3067\u3059

この場合「import javax.validation.constraints.NotEmpty;」の記述があるエラーメッセージが書き換わる対象になる。


・失敗例
プロパティファイルに日本語をそのまま埋め込んでしまった場合はもれなく文字化けする。次は文字化けした例である。

javax.validation.constraints.Email.message = Emailを入力してください

結果
Emailãå¥åãã¦ãã ãã

画像1

見事に文字化けしている。文字化けした場合は文字列をユニコードエスケープさせると良い。再掲になるがユニコードエスケープするツールを紹介しておく。



この記事が気に入ったらサポートをしてみませんか?