2

私はSpringブートとHibernateバリデーターとThymeleafを使用します。私のコントローラにi18nでカスタムhibernate検証メッセージを返すにはどうしたらいいですか?

フォームアイテムを検証するとすべて問題ありません。

しかし、私は検証コードを追加した後、それは間違っているコードだ場合、私がチェックは、

コードが間違っている

は、私は新しい FieldErrorを追加し、それを返します。

if (!captchaCode.equalsIgnoreCase(user.getVrifyCode())){ 
     bindingResult.addError(new FieldError("user", "vrifyCode", "{singup.vrifycode.error}")); 
    } 

そしてもちろん、私は私のValidationMessages.propertiesファイルでsingup.vrifycode.errorを定義しました。

ウェブページでは、正しい値ではなく、singup.vrifycode.errorと表示されます。

私のモデルでは、このようなことはすべて大丈夫です。

@NotBlank(message="{signup.email.null}") 
@Email(message="{signup.email.fomart}") 
private String email; 

私のページに正しい値を表示するにはどうすればよいですか?

私ができない場合は、ValidationMessages_en_US.properties、ValidationMessages_ja_JP.propertiesなどで正しい値(ロケール別)を取得する方法を教えてください。

ありがとうございます!

答えて

1

最初に、2つの異なるバリデーションAPIがあることを理解する必要があります。最初にBindingResultとクラスでSpringの検証を行い、アノテーションを含むBean検証API(Hibernate Validator)を実行します。良いニュースは、SpringがBean Validation APIからの検証エラーを翻訳するので、これらは連携して動作します。

一つの違いは、春には、(春にコードと呼ばれる)その翻訳キーの周り{}を使用念頭に置いてそれを維持していないということです。それは我々がここで働いている春の検証であるため、翻訳は、 messagesファイルにあるべきこと

new FieldError("user", "vrifyCode", user.getVrifyCode(), false, new String[] {"singup.vrifycode.error"}, null, null) 

注:

は、国際化のためには、FieldErrorの7-引数のコンストラクタを使用する必要があります。

+0

誠にありがとうございます。私はエラーメッセージを正しく表示しましたが、あなたが言うように、Springメッセージファイルで定義されたメッセージのみを表示できます.Hibernate Validatorメッセージファイル(ValidationMessages_en_US.properties)を使用できるかどうかを知りたい場合は、ソースコードを変更するHibernate Validatorコントロールの下での検証)。 PS:私はBean Validation APIでチェックできないので、私のコントローラの検証コードをチェックします。ありがとう! – YOUNG

+0

@YOUNGカスタムコードを使用してHibernateメッセージファイルを読み込むことができますが、その目的がすべての検証メッセージを同じ場所に持つことが目的ならば、すべてをすぐに使えるSpringメッセージファイルに入れます。 – holmis83

+0

もしそれがすべてのメッセージをHibernateメッセージファイルに入れる方法がないならば?私のソースコードを変更することさえできます。 – YOUNG

関連する問題