私は、Springモジュールを使用して Spring Bean を検証するための注釈ベースのアプローチを調査しています。このチュートリアルでは、次の Bean (ゲッターとセッターは省略) を例として使用します。
public final class User {
@NotBlank
@Length(max = 80)
private String name;
@NotBlank
@Email
@Length(max = 80)
private String email;
@NotBlank
@Length(max = 4000)
private String text;
}
特定の検証規則に従わない場合に使用されるエラー メッセージは、次の形式に従う必要があります。
bean-class.bean-propery[validation-rule]=Validation Error message
上記のクラスの例は次のとおりです。
User.email[not.blank]=Please enter your e-mail address.
User.email[email]=Please enter a valid e-mail address.
User.email[length]=Please enter no more than {2} characters.
メッセージ キーにクラス名が含まれているという事実には、いくつかの問題があります。
- クラスの名前が変更された場合、メッセージ キーも変更する必要があります。
User.email と同じように検証される電子メール プロパティを持つ別のクラス (Person など) がある場合、メッセージを複製する必要があります。
Person.email[not.blank]=メールアドレスを入力してください。
Person.email[email]=有効な電子メール アドレスを入力してください。
Person.email[length]={2} 文字以内で入力してください。
実際、ドキュメントでは、次のように特定のルール (@Email など) のデフォルト メッセージを構成できると主張しています。
email=email address is invalid
このデフォルト メッセージは、ルールの Bean 固有のメッセージが見つからない場合に使用する必要があります。ただし、私の経験では、これは単に機能しません。
メッセージの重複を回避する別のメカニズムは、エラー メッセージのキーをルール アノテーションに渡すことです。たとえば、@Email ルールに対して次のデフォルト エラー メッセージを定義したとします。
badEmail=Email address is invalid
このメッセージは、関連するプロパティに次のように注釈を付ける場合に使用する必要があります。
@Email(errorCode="badEmail")
private String email;
しかし、私はこれを何度も試しましたが、うまくいかないようです。この検証フレームワークを使用するときに、エラー メッセージの重複を避ける方法を見つけた人はいますか?