我正在开发一个Spring MVC项目,我正在使用Hibernate Validator来验证表单中的输入字段。由于我的项目是基于Maven的,我添加了这种依赖:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-validator-annotation-processor</artifactId>
<version>4.1.0.Final</version>
</dependency>
表单验证过程正常但现在,我想覆盖或国际化默认错误消息。
例如,默认情况下,使用@NotEmpty批注将生成消息“可能不为空”。我如何通过自己的消息替换此消息?我尝试了几种解决方案:
但是仍会显示默认消息......
任何提示? Thx提前。
答案 0 :(得分:5)
是的,你可以这样做。您可以从属性文件加载错误消息。但是你需要以正确的格式获得密钥。与NotEmpty.ClassName.fieldName=fieldName Can not be empty
一样。
您只需在属性文件中指定确切的类名和属性名称即可。在你的情况下,其他一切看起来都很完美。
对于具有该注释的所有字段,您还可以为特定类型的验证注释提供常见错误消息。与javax.validation.constraints.NotNull=Notnull erro happened!
希望这会对你有所帮助。欢呼声。
答案 1 :(得分:1)
这是一个解释,说明如何在给出或用于验证的每个注释后面找到确切的属性名称。见下面提到的步骤。
@Size(min = 1, max = 50, message = "Email size should be between 1 and 50")
现在从验证标记中删除{message =“电子邮件大小应介于1到50之间}。
执行此操作后,您的注释将如下所示。
@Size(min = 1, max = 50)
现在在控制器端调试提交表单时调用的方法。以下是我在用户点击提交时接收请求的方法。
public static ModelAndView processCustomerLoginRequest(IUserService userService,LoginForm loginForm,
HttpServletRequest request, HttpSession session, BindingResult result, String viewType, Map<String, LoginForm> model)
现在将调试点放在方法的第一行并调试参数“result”。
BindingResult result
在dubugging你会在代码数组中找到这样的字符串。
Size.loginForm.loginId
现在在属性文件中定义此字符串,并在该字符串中定义消息。编译并执行。只要不验证该注释,就会显示该消息。
Size.loginForm.loginId=email shouldn't be empty.
基本上spring将自己的字符串作为其属性文件消息的键。在上面的键
Size(@Size) = validation annotation name
loginForm = My Class Name
loginId = Property name in LoginForm class.
这种方法的美妙之处在于你将使用Spring Internationalization时运行良好。它会在语言发生变化时自动切换消息文件。