【问题标题】:Unable to serialize/deserialize ZonedDateTime correctly using jackson无法使用杰克逊正确序列化/反序列化 ZonedDateTime
【发布时间】:2022-12-12 18:25:43
【问题描述】:

我想在我的 spring boot 应用程序中序列化/反序列化 ZonedDateTime,所以我需要自定义 ObjectMapper。但是当我反序列化它时,我无法正确获取 ZonedDateTime。

这是我的示例代码:

ObjectMapper mapper = new ObjectMapper()
    .enable(MapperFeature.DEFAULT_VIEW_INCLUSION)
    .enable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
    .disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS)
    .findAndRegisterModules();

ZonedDateTime dateTime = ZonedDateTime.now();
String json = mapper.writeValueAsString(dateTime);
LOGGER.info("ZonedDateTime json: " + json);

ZonedDateTime dateTime2 = mapper.readValue(json, ZonedDateTime.class);
assertEquals(dateTime, dateTime2);

此测试失败并显示以下内容:

org.opentest4j.AssertionFailedError: 
Expected :2022-12-12T18:00:48.711+08:00[Asia/Shanghai]
Actual   :2022-12-12T10:00:48.711Z[UTC]

【问题讨论】:

标签: java datetime jackson


【解决方案1】:

您不需要自定义 ObjectMapper。尝试在您的属性上方添加此注释:

@JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ss.SSSZ")
ZonedDateTime myDate

有关详细信息,请查看此问题和接受的答案:Spring Data JPA - ZonedDateTime format for json serialization

【讨论】:

    猜你喜欢
    • 2016-04-18
    • 2017-06-23
    • 1970-01-01
    • 1970-01-01
    • 2019-09-02
    • 2019-08-04
    • 1970-01-01
    • 1970-01-01
    • 2015-04-07
    相关资源
    最近更新 更多