Java 如何让DateTimeFormat与SpringMVC一起工作?

Java 如何让DateTimeFormat与SpringMVC一起工作?,java,spring,spring-mvc,Java,Spring,Spring Mvc,我有一个控制器方法,如下所示: @RequestMapping(headers = "Accept=application/json;charset=utf-8", value = "/test", method = RequestMethod.GET) @ResponseBody public Blah test(@ModelAttribute MyObject parms, HttpServletRequest request) throws Exception {

我有一个控制器方法,如下所示:

@RequestMapping(headers = "Accept=application/json;charset=utf-8", value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public Blah test(@ModelAttribute MyObject parms, HttpServletRequest request) throws Exception { 

        // blah blah
    }
public class MyObject{

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private Calendar someDate;
    // blah blah setters getters
MyOBject看起来像这样:

@RequestMapping(headers = "Accept=application/json;charset=utf-8", value = "/test", method = RequestMethod.GET)
    @ResponseBody
    public Blah test(@ModelAttribute MyObject parms, HttpServletRequest request) throws Exception { 

        // blah blah
    }
public class MyObject{

    @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME)
    private Calendar someDate;
    // blah blah setters getters
当我通过浏览器调用此方法时,如下所示:

http://localhost:8080/blah/test?someDate=2011-07-11T21%3A28%3A59.564%2B01%3A00
我收到错误400-请求错误

我一直在为someDate尝试各种不同的值(总是使用URL编码器来编码特殊字符),但什么都不起作用。 我尝试过的所有方法(URL前编码):

2000-10-3101:30:00.000-05:00

2011-07-11T21:28:59.564+01:00

2014-04-23T13:49:28.600Z

我知道日期不匹配,我只是想让Spring帮我把这个该死的日期解析成日历对象!!(虽然我更喜欢java.sql.Timestamp,但这可能更难实现)

我该怎么做

我写错日期了吗? 我是否对ModelAttribute中的属性使用了错误的注释(注意,我有许多其他参数,所以我将它们捆绑在ModelAttribute对象中,不想使用@RequestParm)

日志文件中显示的错误:

Field error in object 'myObject' on field 'someDate': rejected value [2011-07-11T21:28:59.564+01:00]; codes [typeMismatch.myObject.someDate,typeMismatch.someDate,typeMismatch.java.util.Calendar,typeMismatch]; arguments [org.springframework.context.support.DefaultMessageSourceResolvable: codes [myObject.someDate,someDate]; arguments []; default message [someDate]]; default message [Failed to convert property value of type 'java.lang.String' to required type 'java.util.Calendar' for property 'someDate'; nested exception is org.springframework.core.convert.ConversionFailedException: Failed to convert from type java.lang.String to type @org.springframework.format.annotation.DateTimeFormat java.util.Calendar for value '2011-07-11T21:28:59.564+01:00'; nested exception is java.lang.IllegalArgumentException: Unable to parse '2011-07-11T21:28:59.564+01:00']
这个

值不正确,因为预期格式为

yyyy-MM-dd'T'HH:mm:ss.SSSZ
+0100
时区偏移内不能有


您一定是url编码错误。

如果您将日志设置为调试,Spring会告诉您这个问题。您的第一个测试对我有效。它怎么可能对您有效?我正在将日志文件中的错误添加到我的操作的末尾(太长,无法添加注释)您使用的是哪个Spring版本?如果日期是正确的URL编码,这应该可以工作。是的,这就是问题所在!我把冒号放在那里,以为我需要它。谢谢你接过来@索蒂里奥斯备受关注。该网站误导了ISO.DATE\U TIME文件中的示例,偏移量中有冒号,这也误导了我。