[英]Java Polymorphic Json Deserialization
我在我的项目 (Spring Java) 中使用 jackson 作为序列化和反序列化的一部分。 在我将 interface(contract) 作为 POJO 中的字段的正常场景中,我使用@JsonTypeInfo
和@JsonSubTypes
在多态情况下实现反序列化。 但是,现在,我有这样的场景:
public class classA {
private contractA fieldA;
//constructor and getter-setters.
}
然后,
public interface contractA {
}
最后,
@JsonTypeInfo(
use = JsonTypeInfo.Id.NAME,
property = "type")
@JsonSubTypes({
@JsonSubTypes.Type(/* concrete-class1 as name-value */),
@JsonSubTypes.Type(/* concrete-class2 as name-value */),
})
public interface contractB extends contractA {
//contract methods.
}
现在,当classA
作为控制器请求主体传递并且我将fieldA
作为fieldA
concrete-class1
或concrete-class2
JsonSubTypes
,jackson 不会使用JsonSubTypes
反序列化为其中之一。 我这样做并有两个合同的原因是由于包依赖性。 contractB
是在不同的封装中的contractA
的。 如何使用 jackson 在contractA
配置JsonSubTypeInfo
在其子类中指定了其JsonSubTypeInfo
。
或者,也欢迎任何其他库或方法。
谢谢 !
这个问题后来通过引入我们自己的自定义JsonTypeInfo
来解决。
当应用程序处于部署状态时,我们获取JsonTypeInfo
注释中存在的所有子类(jackson like custom annotaion)并维护一个数据结构,该数据结构将在serializing
和deserializing
serializing
使用。 这个过程有点类似于Jackson
过程(除了查找嵌套层次结构之外)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.