Jackson抽象类的多态行为

时间:2016-02-29 12:56:54

标签: java jackson polymorphism

拥有包含各种字段的班级DocumentMapping。其中一个字段是类BinaryDocumentMapping,它是抽象的。 BinaryDocumentMapping扩展了3个其他类ExcelDocumentMappingXMLDocumentMappingCSVDocumentMapping

所以我有:

public class DocumentMapping{

    @JsonSubTypes({ @JsonSubTypes.Type(value = ExcelDocumentMapping.class, name = "EXCEL"),
            @JsonSubTypes.Type(value = CsvDocumentMapping.class, name = "CSV"), @JsonSubTypes.Type(value = XmlDocumentMapping.class, name = "XML") })
    private BinaryDocumentMapping binary = null;

其中

public abstract class BinaryDocumentMapping
    implements Serializable {

@JsonTypeName("CSV")
public class CsvDocumentMapping

序列化工作正常,但在将json读入对象时遇到问题:

mapper.reader().withType(DocumentMapping.class).readValue(jsonData);

抛出

  

com.fasterxml.jackson.databind.JsonMappingException:无法构建   com.documentmapping.BinaryDocumentMapping的实例,问题:   抽象类型要么需要映射到具体类型,要有自定义   反序列化器,或者使用其他类型信息进行实例化

有没有办法根据类型反序列化到具体类?

1 个答案:

答案 0 :(得分:1)