2011-08-17 8 views
5

Hibernateのバリデータでカスタムエラーメッセージを追加する私は、このような単純なクラスを持っているどのよう

import javax.validation.constraints.NotNull; 
import org.hibernate.validator.constraints.Length; 

public class Form implements Serializable { 
    @NotNull 
    @Length(min = 2, max = 20) 
    private String lastName; 
} 

私はクラスパスにmessages.propertiesファイルを持っています。

<bean name="validator" 
     class="org.springframework.validation.beanvalidation.LocalValidatorFactoryBean"> 
    <property name="validationMessageSource"> 
     <ref bean="resourceBundleLocator"/> 
    </property> 
</bean> 

<bean name="resourceBundleLocator" class="org.springframework.context.support.ReloadableResourceBundleMessageSource"> 
    <property name="basenames"> 
     <list> 
      <value>classpath*:messages.properties</value> 
     </list> 
    </property> 
</bean> 

私が欲しいのは、検証されたbeanに従ってカスタマイズされたエラーメッセージを取得することです。言い換えれば、各ConstraintViolationオブジェクトに、既定のプロパティファイルではなく、プロパティファイルで定義したエラーメッセージを返すようにしたいとします。このフォーマット{xxx.yyyy.zzzz}のような値を持つメッセージプロパティを追加し、そのメッセージをmessages.propertiesファイルから参照することは可能ですか?

ValidatorFactory factory = Validation.buildDefaultValidatorFactory(); 
    Validator validator = factory.getValidator(); 
    Set<ConstraintViolation<Form>> inputErrors = validator.validate(form); 

@ NotNullと@Lengthのデフォルトメッセージをカスタマイズするにはどうすればよいですか? Hibernateの検証に

私の経験は、ゼロある、ステップガイドによって任意のサンプルコードまたは工程が理解されるであろう。

答えて

4

メッセージ値を保持するこのリソースバンドルファイルがあります。

@NotNull注釈 へのパスを使用してメッセージを手動でオーバーライドする必要があると思います。 はjavax.validation.constraints.NotNull=Notnull error happened! などです。そのため、ここで

ルック:(

Hibernate Validator - The error message

希望

+0

うんフリッツを助け、それは本当だが、私は多くの@NotNullを持っているので、私はデフォルトmessageTemplateパスを上書きしたくないともちろん他の注釈)をFormクラスに追加します。私はそれぞれのプロパティに対して特定のエラーメッセージを追加したいと思います。カスタムMessageInterpolatorを実装することなく**簡単な方法がありますか?私はカスタムメッセージ補間の実装のカップルを見つけましたが、私はこれらのいずれかを理解していません。完全なソースコードでもっとも簡単な解決策を教えてください。 – nash

+0

また、この{vvvv.ssss.rrrt.message}のような形式で各検証アノテーションのメッセージ属性をオーバーライドしようとしましたが、ConstraintViolationのgetMessageを呼び出すと、そのメッセージではなくそのまま出力されます。 – nash

+0

私は見る!私の心に来る唯一の方法は、メッセージを保持するカスタムバリデータを作成することです! @MyNotNull +メッセージのように? か、この ' ValidatorFactory工場= Validation.buildDefaultValidatorFactory(のようなものを行うことができます)。 バリデータのバリデータ= factory.getValidator(); 車の車=新しい車(null); >を設定します。constraintViolations = validator.validate(car); assertEquals(1、constraintViolations.size()); assertEquals( "nullでない可能性があります"、constraintViolations.iterator()。next()。getMessage()); ' とオブジェクトのメッセージを傍受する! – stereoscope