我正在使用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(以及src / main / webapp / WEB-INF)上的messages.properties文件......
我在messages.properties中尝试过各种各样的组合,甚至可以简单地覆盖@NotEmpty消息,甚至对我来说也不行。
答案 0 :(得分: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;
...
}
答案 1 :(得分:4)
我在另一个问题中找到了答案,这对我有用: spring 3.0 MVC seems to be ignoring messages.properties
对我来说,令人困惑的部分,因为我是Spring的新手,我希望能够将消息放在ValidationMessages.properties中。但是,此错误发生在绑定时,在验证之前。因此,不要使用ValidationMessages.properties,而是使用常规的ResourceBundle messages.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。
答案 2 :(得分:2)
我想要的是能够在存在类型不匹配异常时自定义错误消息,例如
据我了解Spring MVC生成的消息,而不是Hibernate Validator生成的消息。我建议在messages.properties
文件中添加以下行:
typeMismatch.java.lang.Integer=Must specify an integer value
答案 3 :(得分:0)
问题是数据绑定错误消息而不是验证错误消息。有足够的答案here。