Java 使用Jackson转换日期/时间时保留时区信息

Java 使用Jackson转换日期/时间时保留时区信息,java,jackson-databind,Java,Jackson Databind,我将myObjectMapper配置如下: ObjectMapper objectMapper = new ObjectMapper(); objectMapper.registerModule(new JavaTimeModule()); objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false); 然后我有一个数据类: @Data public class TimeTracker { pri

我将my
ObjectMapper
配置如下:

ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
objectMapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
然后我有一个数据类:

@Data
public class TimeTracker {
  private OffsetDateTime timestamp;
}
以及使用中的时间戳进行以下测试:

在将JSON字符串转换为
OffsetDateTime
时,是否有办法保留原始偏移量信息?我认为如果我管理好了,那么转换回JSON将产生相同的值

// Given
String json =
  "{\n" +
    "  \"timestamp\": \"2019-07-02T13:42:34.090909090+02:00\"\n" +
    "}\n";

// When
TimeTracker tracker = objectMapper.readValue(json, TimeTracker.class);

// Then
assertNotNull(tracker);
assertNotNull(tracker.timestamp);
assertEquals(2019, tracker.timestamp.getYear());
assertEquals(Month.JULY, tracker.timestamp.getMonth());
assertEquals(2, tracker.timestamp.getDayOfMonth());
assertEquals(13, tracker.timestamp.getHour()); // <-- The timezone offset is applied here
assertEquals(42, tracker.timestamp.getMinute());
assertEquals(34, tracker.timestamp.getSecond());
assertEquals(ZoneOffset.ofHours(2), tracker.timestamp.getOffset()); // <-- No offset information, as it is converted to UTC

// Back again
String newJson = objectMapper.writeValueAsString(tracker);
assertEquals(json, newJson); // <-- Of course when converting back it is not the same.
original: 2019-07-02T13:42:34.090909090+02:00
result:   2019-07-02T11:42:34.09090909Z