杰克逊:SerializationConfig.hasExplicitTimeZone()

4

我正在尝试将包含OffsetDateTime类型字段的JSON反序列化为对象:

public class Appeal   {

  @JsonProperty("createTime")
  private OffsetDateTime createTime;

为了实现这个目的,我使用JavaTimeModule支持来配置我的ObjectMapper:
public class JsonObjectMapper extends ObjectMapper {

   private static ObjectMapper objectMapper = new JsonObjectMapper();

   private JsonObjectMapper() {
       objectMapper = createObjectMapper();
   }

   private ObjectMapper createObjectMapper() {
       ObjectMapper objectMapper = new ObjectMapper();
       objectMapper.registerModule(new JavaTimeModule());
       return objectMapper;
   }

   public static ObjectMapper getMapper() {
       return objectMapper;
    }
}

但我收到了以下异常:

java.lang.NoSuchMethodError: 'boolean com.fasterxml.jackson.databind.SerializationConfig.hasExplicitTimeZone()'
at com.fasterxml.jackson.datatype.jsr310.ser.InstantSerializerBase.formatValue(InstantSerializerBase.java:144) ~[jackson-datatype-jsr310-2.12.1.jar!/:2.12.1]

2
看起来是不同的com.fasterxml构件版本之间存在不兼容性。尝试使用最新版本(我认为是2.12.1)来替换所有旧版本。顺便说一下,你使用这个类作为单例模式似乎有点复杂了。你可以简单地将静态objectMapper初始化为createObjectMapper()并拥有一个空构造函数,这样这个类就不需要扩展ObjectMapper了。 - k314159
2
是的,这就是解决方案! - Jelly
@k314159,你应该把你的评论变成答案,因为它是正确的答案(2.12.1包含了那个方法)。 - Paul
1个回答

5

看起来是不同版本的com.fasterxml组件之间的不兼容性。尝试使用最新版本(我认为是2.12.3)替换所有组件。

顺便说一下,你使用这个类作为单例有点复杂了。你可以简单地将静态的objectMapper初始化为createObjectMapper(),并且有一个空构造函数,这个类就不需要扩展ObjectMapper了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接