【问题标题】:Spring MVC- Joda datetime error message for invalid dateSpring MVC-无效日期的 Joda 日期时间错误消息
【发布时间】:2015-02-26 15:42:35
【问题描述】:

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

无法将 java.lang.String 类型的属性值转换为属性 request.myDate 所需的类型 org.joda.time.DateTime;嵌套异常是 org.springframework.core.convert.ConversionFailedException: Unable to convert value "55/12/2014" from type java.lang.String to type 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 类型的事情,那么如何识别消息。

【问题讨论】:

  • 这个问题不是stackoverflow.com/questions/6539884/…的重复,但是上一个问题解决不了我的问题
  • 您链接到的答案中的方法应该有效,除非您需要使用密钥typeMismatch.org.joda.time.DateTime。 Spring 会知道使用此消息,因为它会在配置的消息源中查找 typeMismatch. + fullyQualifiedClassName 消息。
  • @BohuslavBurghardt..非常感谢。它有效
  • 我根据评论发布了一个答案并添加了更详细的信息:)

标签: spring spring-mvc datetime jodatime


【解决方案1】:

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

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

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

  1. typeMismatch.request.myDate - 名为“request”的对象上名为“myDate”的属性的转换消息
  2. typeMismatch.myDate - 名为 myDate 的属性的转换消息
  3. typeMismatch.org.joda.time.DateTime - DateTime 类型的转换消息
  4. typeMismatch - 一般转换错误消息

因此您可以定义一些通用的typeMismatch 消息,例如格式不正确,然后根据需要定义更具体的消息。更具体的错误代码比它下面的具有更高的优先级。因此,如果您同时定义了 typeMismatch 和 typeMismatch.org.joda.time.DateTime 消息,则将使用后者。

【讨论】:

    猜你喜欢
    • 2011-11-25
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-02
    • 1970-01-01
    • 2011-09-26
    相关资源
    最近更新 更多