2016-09-29 41 views
1

私は私のカスタムメッセージをビーン検証APIを使用してフォームの検証をやっている:私は間違った日付形式を置くまでorg.springframework.format.annotation.DateTimeFormatにカスタムエラーメッセージを追加するには?

@NotNull(message = "Please enter your birthday.") 
@DateTimeFormat(pattern = "MM/dd/yyyy") 
@Past(message = "That's impossible.") 
private Date birthday; 

すべてが良い作品。私は他の注釈と同じように、私はそこに私のメッセージを追加することはできませんorg.springframework.format.annotation.DateTimeFormatから@interface DateTimeFormatに何のフィールドmessageがないので

Failed to convert property value of type [java.lang.String] to required type 
[java.util.Date] for property birthday; nested exception is 
bla-bla-bla... 

:それから私は私のページのように長いと詳細なエラーメッセージが表示されました。

"Please use MM/dd/yyyy format"のようなカスタムメッセージをどのように指定できますか?

答えて

3

MessageSource beanとmessages.propertiesファイルを使用する必要があります。そこには以下のようなKey-Valueを追加できます。

typeMismatch=Please use MM/dd/yyyy format 

もしあなたがSpringBootを使用しているのであれば、MessageSource beanはデフォルトで利用可能になり、messages.propertiesにkey-valueを追加するだけです。通常のSpringアプリケーションでは、ReloadableResourceBundleMessageSourceまたはResourceBundleMessageSourceを使用できます。

プロパティキーは、次の順序で解決されます。

typeMismatch.[form].[property] 
typeMismatch.[form] 
typeMismatch 

カスタムエラーメッセージを追加するための正しい方法はDefaultMessageCodeResolver ているあなたは、オブジェクト+フィールドレベルでのエラーをバインドするために、リゾルバを使用することができますhttp://jtuts.com/2014/11/09/validating-dates-in-spring-form-objects/

+0

を見つけ、私はそれを簡単にするために、質問でこれをスキップ。 Btw 'message.properties'は、メッセージを別のファイルに外部化することによって便宜的に使用しています。そして、この 'typeMismatch'プロパティをエンティティクラス内で指す場所はどこですか? – DimaSan

+0

このキーを指す必要はありません。 Annotation @DateTimeFormatは自動的にmessage.propertiesファイルからキー値を取得します。私は私の答えを更新しました。参照してください。 – abaghel

+0

ありがとう、私は今夜それを試してみます。 – DimaSan

2

をご参照ください(typeMismatch.YourClassName.birthday =カスタムメッセージ。) javadocで述べたように。

私はすでにこのBeanおよびファイルを持っている詳細な使用here

関連する問題