3

我正在开发一个 Spring MVC 项目,在该项目中我使用 Hibernate Validator 来验证表单中的输入字段。由于我的项目是基于 Maven 的,我添加了这个依赖项:

    <dependency>
        <groupId>org.hibernate</groupId>
        <artifactId>hibernate-validator-annotation-processor</artifactId>
        <version>4.1.0.Final</version>
    </dependency>

表单验证过程工作正常,但现在,我想覆盖或国际化默认错误消息。

例如,默认情况下,使用 @NotEmpty 注释将产生“可能不是空的”消息。如何用我自己的消息替换此消息?我尝试了几种解决方案:

  • 定义一个 id 为 "messageSource" 的 Spring bean 并设置它的 "basenames" 属性
  • 在项目类路径中创建 ValidationMessages.properties 文件

但是仍然显示默认消息...

有什么提示吗?提前谢谢。

4

2 回答 2

5

是的,你可以这么做。您可以从属性文件加载错误消息。但是您需要有正确格式的密钥。喜欢NotEmpty.ClassName.fieldName=fieldName Can not be empty

您只需要在属性文件中指定确切的类名和属性名。在你的情况下,其他一切看起来都很完美。

对于具有该注释的所有字段,您还可以为特定类型的验证注释提供常见错误消息。像javax.validation.constraints.NotNull=Notnull erro happened!

希望这对您有所帮助。干杯。

于 2012-06-22T08:17:23.640 回答
1

这是一个关于如何在给定或用于验证的每个注释后面找到确切属性名称的解释。请参阅下面提到的步骤。

@Size(min = 1, max = 50, message = "Email size should be between 1 and 50")

现在从验证标签中删除 { message = "Email size should be between 1 and 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)

现在在方法的第一行放置一个调试点并调试参数“结果”。

BindingResult result

在调试时,您会在代码数组中找到这样的字符串。

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 国际化时也运行良好。它会随着语言的变化自动切换消息文件。

于 2013-12-05T04:05:54.410 回答