6

我有一个简单的 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 Date 和 Time 容器。

我只是在 中找到了addFormatters(FormatterRegistry registry)方法WebMvcConfigurationSupport,但我真的不知道如何使用它。

4

1 回答 1

0

我让它为 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 M作为对问题的编辑发布

于 2017-05-02T15:06:57.883 回答