java - 使用默认类型对列表进行 Jackson 反序列化

标签 java json list jackson abstract-class

美好的一天, 大家好,

我正在尝试配置 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);

然而,这些会导致其他问题。

有人可以帮我做同样的事情吗?我已经在这上面花了好几天了。这似乎是 jackson 的一个限制。如果我错了请纠正我

最佳答案

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

List<SimpleModule> 

定义为

List<Object>.

关于java - 使用默认类型对列表进行 Jackson 反序列化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18691114/

相关文章:

java - 使用 SSL 加密和 NTLM 身份验证的 HttpClient 失败

java - 契约(Contract)与异常(exception)

java - 将InputStream解析为Json对象并获取值

java - Gremlin 通过 java 读取外部 JSON 顶点并添加到现有开放图给出了 Invalid vertexprovided 异常?

php - 如何使用 PHP 和 Swift 5 解析 JSON

python-3.x - 检查元素是否在 python 列表中第一次出现

java - 当类中实际上有一个 main 方法时,没有 main 方法

java - 子模块 Maven 依赖关系管理的最佳实践

python - 有没有办法将带有参数的函数 append 到列表中?

list - 只是试图递归地打印一个列表,但没有打印