如何在org.springframework.format.annotation.DateTimeFormat中添加自定义错误消息?

时间:2016-09-29 19:55:23

标签: java spring validation

我正在使用 Bean Validation API 对我的自定义消息进行表单验证:

@NotNull(message = "Please enter your birthday.")
@DateTimeFormat(pattern = "MM/dd/yyyy")
@Past(message = "That's impossible.")
private Date birthday;

在我输入错误的日期格式之前,一切正常。然后我在我的页面上得到了如此冗长而详细的错误消息:

Failed to convert property value of type [java.lang.String] to required type
[java.util.Date] for property birthday; nested exception is
bla-bla-bla...

由于来自message的{​​{1}}中没有字段@interface DateTimeFormat,因此无法像其他注释一样添加我的消息。

如何指定org.springframework.format.annotation.DateTimeFormat等自定义消息?

2 个答案:

答案 0 :(得分:3)

你必须使用MessageSource bean和messages.properties文件,你可以在那里添加键值,如下所示。

typeMismatch=Please use MM/dd/yyyy format

如果您正在使用SpringBoot,则默认情况下MessageSource bean将可用,您只需要在messages.properties中添加键值。对于普通的Spring应用程序,您可以使用ReloadableResourceBundleMessageSource或ResourceBundleMessageSource。

按以下顺序解析属性键。

typeMismatch.[form].[property] 
typeMismatch.[form]
typeMismatch

请参阅http://jtuts.com/2014/11/09/validating-dates-in-spring-form-objects/

答案 1 :(得分:2)

添加自定义错误消息的正确方法是DefaultMessageCodeResolver 您可以使用解析程序绑定对象+字段级别的错误(typeMismatch.YourClassName.birthday =自定义消息。),如javadoc中所述。

查找详细用法here