根据http://wiki.fasterxml.com/JacksonFAQDateHandling,“DateTime 可以自动序列化/反序列化,类似于处理 java.util.Date 的方式。” 但是,我无法完成此自动功能。有与此主题相关的 StackOverflow 讨论,但大多数都涉及基于代码的解决方案,但根据上面的引用,我应该能够通过简单的配置来完成这一点。
根据http://wiki.fasterxml.com/JacksonFAQDateHandling我设置了我的配置,以便将日期写为时间戳是错误的。结果是 java.util.Date 类型被序列化为 ISO 8601 格式,但 org.joda.time.DateTime 类型被序列化为长对象表示。
我的环境是这样的:
Jackson 2.1
Joda time 2.1
Spring 3.2
Java 1.6
我的 jsonMapper bean 的 Spring 配置是
@Bean
public ObjectMapper jsonMapper() {
ObjectMapper objectMapper = new ObjectMapper();
//Fully qualified path shows I am using latest enum
ObjectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.
WRITE_DATES_AS_TIMESTAMPS , false);
return objectMapper;
}
我的测试代码片段是这样的
Date d = new Date();
DateTime dt = new DateTime(d); //Joda time
Map<String, Object> link = new LinkedHashMap<String, Object>();
link.put("date", d);
link.put("createdDateTime", dt);
JSON 输出的结果片段是这样的:
{"date":"2012-12-24T21:20:47.668+0000"}
{"createdDateTime": {"year":2012,"dayOfMonth":24,"dayOfWeek":1,"era":1,"dayOfYear":359,"centuryOfEra":20,"yearOfEra":2012,"yearOfCentury":12,"weekyear":2012,"monthOfYear":12 *... remainder snipped for brevity*}}
我的期望是 DateTime 对象应该与基于配置的 Date 对象匹配。我做错了什么,或者我误解了什么?我是否从 Jackson 文档中自动阅读了太多关于这个词的内容,以及生成了一个字符串表示形式(尽管不是 ISO 8601)的事实正在生成广告中的自动功能?