无效日期的Spring MVC-Joda datetime错误消息

时间:2014-12-30 13:05:29

标签: spring spring-mvc datetime jodatime

我的请求对象中有一个joda datetime属性,我使用@DateTimeFormat进行日期格式化。
但是当我输入无效日期(比如说55日)时,它会显示整个消息

无法将类型为java.lang.String的属性值转换为属性request.myDate所需的类型org.joda.time.DateTime;嵌套异常是org.springframework.core.convert.ConversionFailedException:无法转换值" 55/12 / 2014"从类型java.lang.String到类型org.joda.time.DateTime;嵌套异常是org.joda.time.IllegalFieldValueException:无法解析" 55/12 / 2014":dayOfMonth的值55必须在[1,31]

范围内

如何在Spring生成当前消息时将其更改为自定义消息。

在另一个SO问题中 的 Spring mvc Joda Datetime converter fail if invalid date
它被要求在message.properties中输入。
但是我无法理解如何从属性文件中选择消息,因为我没有做任何error.rejectValue类型的事情,那么如何识别消息。

1 个答案:

答案 0 :(得分:3)

您在问题中链接的方法应该有效。但是您应该使用的消息密钥是typeMismatch.org.joda.time.DateTime

即使您没有手动拒绝任何值,Spring也会根据DefaultMessageCodesResolver的JavaDoc中描述的规则自动知道在哪里查找消息。

在您描述的情况下,Spring将专门寻找以下代码:

  1. typeMismatch.request.myDate - 名为“request”的对象上名为“myDate”的属性的转换消息
  2. typeMismatch.myDate - 名为myDate
  3. 的属性的转化消息
  4. typeMismatch.org.joda.time.DateTime - DateTime类型的转换消息
  5. typeMismatch - 常规转换​​错误消息
  6. 因此,您可以定义一些常规typeMismatch消息,例如格式错误,然后根据需要定义更具体的消息。更具体的错误代码优先于低于它的错误代码。因此,如果您同时定义了typeMismatchtypeMismatch.org.joda.time.DateTime条消息,则会使用后者。