[英]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.