尝试解析json时出现NoSuchFieldError“ ADJUST_DATES_TO_CONTEXT_TIME_ZONE”

Mar*_*tin 5 java jodatime jackson

我想使用杰克逊将包含日期的json字符串转换为jodaTime的DateTime。不幸的是我得到这个错误

java.lang.NoSuchFieldError: ADJUST_DATES_TO_CONTEXT_TIME_ZONE
Run Code Online (Sandbox Code Playgroud)

json对象如下所示:

{
"add_time": "2017-04-26 14:26:58",
}
Run Code Online (Sandbox Code Playgroud)

我在pom.xml中包含了乔达时间和杰克逊,如下所示:

        <dependency>
            <groupId>joda-time</groupId>
            <artifactId>joda-time</artifactId>
            <version>2.9.9</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>${jackson.version}</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.datatype</groupId>
            <artifactId>jackson-datatype-joda</artifactId>
            <version>${jackson.version}</version>
        </dependency>
Run Code Online (Sandbox Code Playgroud)

杰克逊版本为2.8.8。我以这种方式创建了对象映射器:

    ObjectMapper mapper = new ObjectMapper();
    mapper.registerModule(new JodaModule());
Run Code Online (Sandbox Code Playgroud)

有人知道问题可能在哪里吗?我已经坚持了几个小时。我也试过禁用,DeserializationFeature.ADJUST_DATES_TO_CONTEXT_TIME_ZONE但无济于事。

Man*_*dis 0

您需要指定一种自定义日期时间格式,因为 JSON 中的格式不是 Jackson 所期望的格式。您可以通过@JsonFormat字段或 setter 方法上的注释轻松完成此操作(无需禁用ADJUST_DATES_TO_CONTEXT_TIME_ZONE)。例如

@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
DateTime addTime;
Run Code Online (Sandbox Code Playgroud)

您的示例中的日期将被解析为2017-04-26T14:26:58.000Z. 顺便说一句,这是杰克逊期望的默认格式。

如果您不想添加注释,您可以考虑自定义反序列化器,但这更复杂。