为什么Spring解析我的日期错了?

时间:2015-12-17 18:09:44

标签: java spring date spring-mvc

我有一个简单的Spring MVC控制器,其方法以java.util.Date个对象作为参数:

@Controller
public class ExampleController {

    @RequestMapping(value = "/foo", params = { "foo", "date" }, produces = "application/json")
    @ResponseBody
    public Blah getFoo(@RequestParam String foo, @RequestParam @DateTimeFormat(iso = ISO.DATE_TIME) Date date) {
        // do something interesting here
    }
}

如果我提供这个由Moment.js生成的日期参数,例如2015-12-17T12:04:10-05:00,它似乎就像我给了它一个12小时的时间,因为我从另一端拿出的日期从它是.toString()Thu Dec 17 00:04:00 EST 2015。为了进行比较,如果我为其添加时间字符串2015-12-17T09:04:10-05:00,我会得到预期的Thu Dec 17 09:04:00 EST 20152015-12-17T13:04:10-05:00收益Thu Dec 17 13:04:00 EST 2015

我已尝试对上述内容进行各种调整,例如完全省略@DateTimeFormat或使用pattern = "yyyy-MM-dd'T'HH:mm:ssZ",但我似乎总是得到相同的结果。

这是Spring中可能存在的错误吗?或者,我可能会遗漏一些配置吗?

我正在使用Spring Boot 1.3.0。

1 个答案:

答案 0 :(得分:2)

似乎涉及一个全球注册的格式化程序,它覆盖了我所拥有的@DateTimeFormat注释。并且,格式化程序使用了模式“yyyy-MM-dd'T'hh:mm,这就是为什么我看到中午解析时的模糊性......

从我的WebMvcConfigurerAdapter#addFormatters(FormatterRegistry registry)方法中删除该格式化程序似乎足以让@DateTimeFormat启动。我还发现我必须使用上面的模式,而不是iso = ISO.DATE_TIME的味道,因为我的数据没有包含小数秒。