繁体   English   中英

Java多态Json反序列化

[英]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-class1concrete-class2 JsonSubTypes ,jackson 不会使用JsonSubTypes反序列化为其中之一。 我这样做并有两个合同的原因是由于包依赖性。 contractB是在不同的封装中的contractA的。 如何使用 jackson 在contractA配置JsonSubTypeInfo在其子类中指定了其JsonSubTypeInfo

或者,也欢迎任何其他库或方法。

谢谢 !

这个问题后来通过引入我们自己的自定义JsonTypeInfo来解决。

当应用程序处于部署状态时,我们获取JsonTypeInfo注释中存在的所有子类(jackson like custom annotaion)并维护一个数据结构,该数据结构将在serializingdeserializing serializing使用。 这个过程有点类似于Jackson过程(除了查找嵌套层次结构之外)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM