即使明确禁用,Jackson ObjectMapper 也会在反序列化时将日期调整为上下文时区

Jackson ObjectMapper adjusts dates to context timezone when deserializing even if explicitly disabled

这是我想要 serialize/deserialize JSON 中日期的格式:

"2014-06-18T06:26:56-07:00"

Joda DateTime字段声明如下:

  @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy-MM-dd'T'HH:mm:ssZ")
    private DateTime dueTime;

映射器:

ObjectMapper mapper = new ObjectMapper().enable(SerializationFeature.INDENT_OUTPUT)
            .registerModule(new JodaModule())
            .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE);

mapper.writeValueAsString(objectWithDT)).as("application/json")

在结果 JSON 中,上述时区的日期更改为:

2014-06-18T13:26:56+0000

DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE 是一个 反序列化 特性,在执行 序列化 .

时不考虑它

一个可能的解决方案是使用 TimeZone:

创建一个 ObjectMapper 实例
ObjectMapper mapper =  new ObjectMapper()
            .enable(SerializationFeature.INDENT_OUTPUT)
            .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
            .registerModule(new JodaModule())
            .setTimeZone(TimeZone.getTimeZone("GMT-7"));

有关详细信息,请查看 DateTimeSerializer 代码。