无法为ZonedDateTime

时间:2016-08-23 05:47:21

标签: jackson

我正在使用Jackson 2.8.1进行java对象的序列化。但是,在将ZonedDateTime对象转换为“WRITE_DATES_WITH_ZONE_ID”设置为false的字符串时,我无法摆脱区域ID

ObjectMapper mapper = new ObjectMapper()
            .findAndRegisterModules()
            .setSerializationInclusion(Include.NON_EMPTY)
            .configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false)
            .configure(SerializationFeature.WRITE_DATES_WITH_ZONE_ID, false);

ZonedDateTime zdt = ZonedDateTime.now();
System.out.println(mapper.writeValueAsString(zdt)); // "2016-08-23T13:35:38.127+08:00[Asia/Shanghai]"

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:2)

我想说问题是因为你叫“findAndRegisterModules”。

您可能添加了以下依赖项:

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

这样做,您引入了两个新模块:“JSR310Module”(不建议使用)和“JavaTimeModule”。

“findAndRegisterModules”可以注册不能正确支持WRITE_DATES_WITH_ZONE_ID功能的“JSR310Module”。

您可以通过删除“findAndRegisterModules”并添加:

来注册正确的模块
JavaTimeModule module = new JavaTimeModule();
registerModule(module);

然后,不要忘记在映射器中禁用WRITE_DATES_WITH_ZONE_ID:

disable(SerializationFeature.WRITE_DATES_WITH_ZONE_ID);