使用自定义消息进行 JSR-303 验证
我正在使用 Spring 3.0.5-RELEASE,带有 JSR-303 样式验证和 Hibernate 验证器 4.1.0-Final。我的模型类看起来像这样:
public class Model {
@Max(value=10,message="give a lower value")
Integer n;
}
这在带有绑定的 spring mvc servlet 中作为请求参数传递。所以请求看起来像这样:
http://localhost:8080/path?n=10
我想要的是当出现类型不匹配异常时能够自定义错误消息,例如
http://localhost:8080/path?n=somestring
这会导致我想要替换的很长的默认消息。
我已经尝试了网络上描述的几乎所有配置,但似乎都不起作用。有人知道正确的配置是什么吗?
具体来说,我的 mvc-servlet.xml 中需要什么? messages.properties 文件中需要什么? message.properties 文件是否有一个神奇的名称,以便 hibernate-validator 能够找到它?
我在 mvc-servlet.xml 中使用了以下内容,但没有成功:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:basename="messages" />
以及 src/main/resources 中的 messages.properties 文件(以及 src/main/webapp/WEB-INF 中的 messages.properties 文件)...
我已经尝试了所有方法messages.properties 中的各种组合,甚至可以简单地覆盖 @NotEmpty 消息,甚至这对我来说也不起作用。
I'm using Spring 3.0.5-RELEASE, with JSR-303 style validation and Hibernate validator 4.1.0-Final. My model class looks something like this:
public class Model {
@Max(value=10,message="give a lower value")
Integer n;
}
And this is passed as request param in a spring mvc servlet with binding. So the request would look something like this:
http://localhost:8080/path?n=10
What I want is to be able to customize the error message when there is a type mismatch exception, e.g.
http://localhost:8080/path?n=somestring
Which results in a very long default message that I want to replace.
I've tried just about every configuration described on the web and none of them seem to work. Does someone know what the right configuration is?
Specifically, what do I need in my mvc-servlet.xml? What do I need in my messages.properties file? Does the message.properties file have a magic name so that hibernate-validator will find it?
I've used the following in my mvc-servlet.xml without success:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource" p:basename="messages" />
And a messages.properties file at src/main/resources (and also at src/main/webapp/WEB-INF)...
I've tried all sorts of combinations in messages.properties even for doing simple override of say @NotEmpty messages and even that doesn't work for me.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
错误消息需要放入名为
ValidationMessages.properties
的文件中。只需将其放在类路径中的 hibernate jar 之前的某个位置即可。例如,如果您有一个包含以下属性的 ValidationMessages.properties 文件:
那么您可以拥有一个具有以下约束的域对象:
Error messages need to go into a file named
ValidationMessages.properties
. Just put that somewhere in your classpath before the hibernate jars.For example if you have a
ValidationMessages.properties
file that contains the following properties:Then you could have a domain object with the following constraints:
我在另一个问题中找到了答案,它对我有用:
spring 3.0 MVC 似乎忽略 messages.properties
由于我是 Spring 的新手,令我困惑的是我希望能够将消息放入 ValidationMessages.properties 中。但是,此错误发生在验证之前的绑定时。因此,不要使用 ValidationMessages.properties,而是使用常规 ResourceBundle messages.properties 文件。
将其放入 ??-servlet.xml 文件中:
将此类行放入 messages.properties 文件中。
在此示例中,myRequest 是我的表单模型,amount 是该表单中的一个属性。
typeMismatch 和 methodInitation 是预定义的,对应于绑定/转换异常,就像您似乎得到的那样。我很难为它们找到好的文档或值列表,但我发现它们对应于一些 Spring 异常中的 ERROR_CODE 常量。 http: //static.springsource.org/spring/docs/2.5.x/api/constant-values.html#org.springframework.beans.MethodInitationException.ERROR_CODE
我将此项目的 messages.properties 文件放在根目录中我的源文件夹,将其与 ValidationMessages.properties 一起放入类路径的根目录中。
I found an answer to this in another question and it worked for me:
spring 3.0 MVC seems to be ignoring messages.properties
The confusing part to me, as I am new to Spring, is that I expected to be able to put the message in ValidationMessages.properties. However, this error happens at binding time, before validation. So instead of using ValidationMessages.properties, use your regular ResourceBundle messages.properties file.
Put this in your ??-servlet.xml file:
Put lines like these in your messages.properties file.
In this example myRequest is my form model and amount is a property in that form.
typeMismatch and methodInvocation are pre-defined and correspond to binding/conversion exceptions like the one you seem to be getting. I had a hard time finding good documentation for them or a list of values, but I found that they correspond to ERROR_CODE constants in some Spring exceptions. http://static.springsource.org/spring/docs/2.5.x/api/constant-values.html#org.springframework.beans.MethodInvocationException.ERROR_CODE
I put my messages.properties file for this project in the root of my source folder, which puts it in the root of my classpath, along with ValidationMessages.properties.
据我了解,此消息是由 Spring MVC 生成的,而不是由 Hibernate Validator 生成的。我建议将以下行添加到
messages.properties
文件中:As I understand this messages generated by Spring MVC, not by Hibernate Validator. I suggest to add following line to the
messages.properties
file:问题是针对数据绑定错误消息,而不是针对验证错误消息。有一个足够的答案这里。
The question is for databinding error messages and not for validation error messages. There is an adequate answer here.