将 Spring MVC 中的默认/全局日期格式设置为 ISO 8601

Posted

技术标签:

【中文标题】将 Spring MVC 中的默认/全局日期格式设置为 ISO 8601【英文标题】:Set default/global date format in Spring MVC to ISO 8601 【发布时间】:2013-10-09 12:41:58 【问题描述】:

我有一个简单的 Spring 控制器:

@RequestMapping(value="", method=RequestMethod.GET)
public void search(MyDTO dto) 
    // ...

还有MyDTO

public class MyDTO 
    private DateTime date;
    public DateTime getDate()  return date; 
    public void setDate(DateTime date)  this.date = date; 

我实际上可以使用我的本地日期格式调用控制器方法:03.10.2013 01:00,例如GET http://localhost:8080/test?date=03.10.2013 01:00

但我想要应用范围的 ISO 8601 日期格式,例如:2007-03-01T13:00:00Z

如果我使用 ISO 格式,我会收到以下错误:

Failed to convert property value of type 'java.lang.String' to required type
'org.joda.time.DateTime' for property 'date'; nested exception is
org.springframework.core.convert.ConversionFailedException: Failed to convert
from type java.lang.String to type org.joda.time.DateTime for value
'2013-09-25T23:05:18.000+02:00'; nested exception is
java.lang.IllegalArgumentException: Invalid format:
"2013-09-25T23:05:18.000+02:00" is malformed at "13-09-25T23:05:18.000+02:00"

必须有一些方法可以为 java.util.Date 以及所有那些 Joda 日期和时间容器更改它。

我刚刚在WebMvcConfigurationSupport中找到了addFormatters(FormatterRegistry registry)方法,但是我真的不知道怎么用。

【问题讨论】:

【参考方案1】:

我让它为 Joda Time 工作:

public class WebConfig extends WebMvcConfigurationSupport 
    @Override
    public void addFormatters(FormatterRegistry registry) 
        JodaTimeFormatterRegistrar j = new JodaTimeFormatterRegistrar();
        j.setUseIsoFormat(true);
        j.registerFormatters(registry);
           

我希望有一种更简单的方法来完成所有可能的 Date 实现。

最初由 OP Benjamin MBenjamin M

作为对问题的编辑发布

【讨论】:

以上是关于将 Spring MVC 中的默认/全局日期格式设置为 ISO 8601的主要内容,如果未能解决你的问题,请参考以下文章

Spring MVC - 将用户时区的日期转换为 UTC

带有表单的spring mvc日期格式:输入

SpringMVC配制全局的日期格式

如何使用 Spring MVC @RequestParam 解析不同的 ISO 日期/时间格式

如何让 Spring MVC 读取日期为“2019-3-29”格式的路径参数?

spring Mvc json返回json的日期格式问题