gpt4 book ai didi

json - jackson 自动将 Joda DateTime 格式化为 ISO 8601 格式

转载 作者:IT老高 更新时间:2023-10-28 12:47:57 27 4
gpt4 key购买 nike

根据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 文档中的 automatically 这个词读了太多,而且产生了一个字符串表示(尽管不是 ISO 8601)这一事实正在产生广告中的自动功能?

最佳答案

我能够从 Jackson 用户邮件列表中得到答案,并希望与您分享,因为这是一个新手问题。通过阅读 Jackson Date 常见问题解答,我没有意识到需要额外的依赖项和注册,但事实就是如此。它记录在 git hub 项目页面这里 https://github.com/FasterXML/jackson-datatype-joda

基本上,我必须向特定于 Joda 数据类型的 Jackson jar 添加另一个依赖项,然后我必须在对象映射器上注册该模块的使用。代码片段如下。

对于我的 Jackson Joda 数据类型 Maven 依赖项设置,我使用了这个:

<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-joda</artifactId>
<version>${jackson.version}</version>
</dependency>

为了注册 Joda 序列化/反序列化功能,我使用了这个:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JodaModule());
objectMapper.configure(com.fasterxml.jackson.databind.SerializationFeature.
WRITE_DATES_AS_TIMESTAMPS , false);

关于json - jackson 自动将 Joda DateTime 格式化为 ISO 8601 格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14026081/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com