gpt4 book ai didi

java - 使用 Jackson 反序列化派生类

转载 作者:行者123 更新时间:2023-11-30 10:15:46 24 4
gpt4 key购买 nike

我有两个自动生成的类如下:

public class DataMonitoringClauseType extends ClauseType {
}

public class ClauseType {
}

由于类是自动生成的,我无法为它们定义额外的注释,例如 JsonSubType

我有第三个对象,其中包含如下 ClauseTypes 列表:

public class RootClass {
List<ClauseType> clauses;
}

给定一个序列化的 RootClass,有没有办法反序列化 RootClass 实例,这样我就可以在 中拥有 DataMonitoringClauseType 实例子句列表?

我已经尝试如下注册派生类但没有成功:

ObjectMapper mapper = new ObjectMapper();
mapper.registerSubtypes(DataMonitoringClauseType.class);

请注意,序列化内容作为输入传递给服务器。因此,我没有机会在连载内容中包含类型信息。

最佳答案

不需要使用自定义解串器无需自定义反序列化器或 Gson。 Jackson 提供了几种方法。

首先:仅仅因为您不能直接修改类并不意味着您不能使用 Jackson 注释:这正是“混合”注释的用例。参见 https://dzone.com/articles/jackson-mix-in-annotations例如关于如何使用 mix-ins,这样你就可以拥有等价于

@JsonDeserialize(as=DataMonitoringClauseType.class)
public class ClauseType { .... }

或者,您也可以注册实现类型(您注册子类型的尝试适用于使用类型 id 的多态子类型——但我认为这不是您想要的)。这是使用 Module 接口(interface),方法“addAbstractTypeMapping()”

完成的

https://fasterxml.github.io/jackson-databind/javadoc/2.9/com/fasterxml/jackson/databind/module/SimpleModule.html#addAbstractTypeMapping-java.lang.Class-java.lang.Class-

关于java - 使用 Jackson 反序列化派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50345996/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com