5

JSR-303 スタイルの検証と Hibernate バリデーター 4.1.0-Final を備えた Spring 3.0.5-RELEASE を使用しています。私のモデルクラスは次のようになります。

public class Model {
    @Max(value=10,message="give a lower value")
    Integer n;
}

そして、これはバインディング付きのSpring MVCサーブレットでリクエストパラメータとして渡されます。したがって、リクエストは次のようになります。

http://localhost:8080/path?n=10

私が欲しいのは、型の不一致の例外がある場合にエラーメッセージをカスタマイズできるようにすることです。

http://localhost:8080/path?n=somestring

その結果、置き換えたい非常に長いデフォルト メッセージが表示されます。

Web で説明されているほぼすべての構成を試しましたが、どれも機能していないようです。誰かが正しい構成を知っていますか?

特に、mvc-servlet.xml には何が必要ですか? messages.properties ファイルには何が必要ですか? hibernate-validator が見つけられるように、message.properties ファイルにはマジック ネームがありますか?

mvc-servlet.xml で以下を使用しましたが、成功しませんでした:

<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:basename="messages" />

そして、src/main/resources (および src/main/webapp/WEB-INF) にある messages.properties ファイル...

@NotEmpty メッセージの単純なオーバーライドを行う場合でも、messages.properties であらゆる種類の組み合わせを試しましたが、それでもうまくいきません。

4

4 に答える 4

8

エラー メッセージは、 という名前のファイルに入れる必要がありますValidationMessages.properties。hibernate jar の前のクラスパスのどこかに置くだけです。

たとえばValidationMessages.properties、次のプロパティを含むファイルがあるとします。

email_invalid_error_message=Sorry you entered an invalid email address
email_blank_error_message=Please enter an email address

次に、次の制約を持つドメイン オブジェクトを作成できます。

public class DomainObject{ 
...
@Email(message = "{email_invalid_error_message}")
@NotNull(message = "{email_blank_error_essage}")
@Column(unique = true, nullable = false)
String primaryEmail;
...
}
于 2011-04-25T18:27:51.683 に答える
5

私は別の質問でこれに対する答えを見つけました、そしてそれは私のために働きました: 春3.0MVCはmessages.propertiesを無視しているようです

私はSpringを初めて使用するので、私にとって紛らわしいのは、メッセージをValidationMessages.propertiesに入れることができると期待していたことです。ただし、このエラーは、検証前のバインド時に発生します。したがって、ValidationMessages.propertiesを使用する代わりに、通常のResourceBundlemessages.propertiesファイルを使用してください。

これを??-servlet.xmlファイルに入れます。

<bean id="messageSource" 
 class="org.springframework.context.support.ResourceBundleMessageSource">
    <property name="basename" value="messages"/> </bean>

このような行をmessages.propertiesファイルに入れます。

typeMismatch.myRequest.amount=Amount should be a number.
methodInvocation.myRequest.amount=Amount should be a number.

この例では、myRequestは私のフォームモデルであり、amountはそのフォームのプロパティです。typeMismatchとmethodInvocationは事前定義されており、発生しているように見えるバインディング/変換例外に対応しています。それらの適切なドキュメントや値のリストを見つけるのに苦労しましたが、いくつかのSpring例外のERROR_CODE定数に対応していることがわかりました。 http://static.springsource.org/spring/docs/2.5.x/api/constant-values.html#org.springframework.beans.MethodInvocationException.ERROR_CODE

このプロジェクトのmessages.propertiesファイルをソースフォルダーのルートに配置します。これにより、ValidationMessages.propertiesとともにクラスパスのルートに配置されます。

于 2012-04-19T20:04:28.080 に答える
3

私が欲しいのは、タイプの不一致の例外があるときにエラーメッセージをカスタマイズできるようにすることです。

私が理解しているように、このメッセージはHibernateValidatorではなくSpringMVCによって生成されます。messages.propertiesファイルに次の行を追加することをお勧めします。

typeMismatch.java.lang.Integer=Must specify an integer value
于 2011-06-25T04:43:07.897 に答える
0

問題は、検証エラー メッセージではなく、データ バインディング エラー メッセージです。ここに適切な答えがあります。

于 2014-02-07T12:40:57.540 に答える