繁体   English   中英

无法使用 jackson 正确序列化/反序列化 ZonedDateTime

[英]Unable to serialize/deserialize ZonedDateTime correctly using jackson

我想在我的 spring 启动应用程序中序列化/反序列化 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]

对不起各位,这似乎是我的错。 我应该在创建 ZonedDateTime 时指定 zoneId。

以下代码通过:

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

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

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

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

有关详细信息,请查看此问题和接受的答案: Spring 数据 JPA - json 序列化的 ZonedDateTime 格式

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM