【问题标题】:Jackson Deserialization of List with Default Typing具有默认类型的列表的杰克逊反序列化
【发布时间】:2013-09-12 12:31:29
【问题描述】:

美好的一天, 大家好,

我正在尝试配置 Jackson 对象映射器以将任何 json 字符串反序列化为我的域特定对象。 我已经将对象映射器配置如下

ObjectMapper mapper = new ObjectMapper();
mapper.configure(Feature.FAIL_ON_UNKNOWN_PROPERTIES, false);
mapper.enableDefaultTypingAsProperty(DefaultTyping.NON_FINAL, "remoteClass");

在我的域中,任何 json 字符串都应该包含一个 remoteClass 属性,该属性表示它对应的实际 JAVA POJO(规范名称)。以上配置有助于解析抽象类型

但是,有了上述情况,现在 java.util.Lists 没有得到正确反序列化,因为它们是抽象类型。

我收到以下错误 意外令牌 (START_OBJECT),预期 VALUE_STRING:需要包含类型 id 的 JSON 字符串(对于 java.util.List 的子类型)

在这种情况下,Object Mapper 没有使用默认的 collectionFallBacks

我尝试了其他配置来解决这个问题,例如

SimpleModule module = new SimpleModule("test", Version.unknownVersion());
module.addAbstractTypeMapping(List.class, ArrayList.class);
mapper.registerModule(module);

但是这些会导致其他问题。

有人可以帮助我吗?我现在已经花了几天时间。这似乎是杰克逊的一个限制。如果我错了,请纠正我

【问题讨论】:

    标签: java json list jackson abstract-class


    【解决方案1】:

    我最近遇到了这个问题。试试这个,在你的 POJO 中,而不是将属性定义为

    List<SimpleModule> 
    

    定义为

    List<Object>.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-11
      • 1970-01-01
      相关资源
      最近更新 更多