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

Ayd*_*din 5 java jodatime jackson

这是我想要序列化/反序列化的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;
Run Code Online (Sandbox Code Playgroud)

映射器:

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")
Run Code Online (Sandbox Code Playgroud)

在生成的JSON中,上面带有时区的日期更改为:

2014-06-18T13:26:56+0000
Run Code Online (Sandbox Code Playgroud)

cas*_*lin 6

DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE是一个反序列化功能,在执行序列化时不考虑。

一种可能的解决方案是创建一个ObjectMapper具有以下内容的实例TimeZone:

ObjectMapper mapper =  new ObjectMapper()
            .enable(SerializationFeature.INDENT_OUTPUT)
            .disable(DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE)
            .registerModule(new JodaModule())
            .setTimeZone(TimeZone.getTimeZone("GMT-7"));
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请检查DateTimeSerializer代码。