我有一个简单的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 2015
和2015-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。
答案 0 :(得分:2)
似乎涉及一个全球注册的格式化程序,它覆盖了我所拥有的@DateTimeFormat
注释。并且,格式化程序使用了模式“yyyy-MM-dd'T'hh:mm
,这就是为什么我看到中午解析时的模糊性......
从我的WebMvcConfigurerAdapter#addFormatters(FormatterRegistry registry)
方法中删除该格式化程序似乎足以让@DateTimeFormat启动。我还发现我必须使用上面的模式,而不是iso = ISO.DATE_TIME
的味道,因为我的数据没有包含小数秒。