【发布时间】:2016-06-12 12:41:15
【问题描述】:
有一个包含各种字段的类DocumentMapping。其中一个字段是一个抽象类BinaryDocumentMapping。 BinaryDocumentMapping 扩展了其他 3 个类 ExcelDocumentMapping、XMLDocumentMapping 和 CSVDocumentMapping。
所以我有:
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的实例,问题: 抽象类型要么需要映射到具体类型,要么有自定义 反序列化器,或使用其他类型信息进行实例化
有没有办法根据类型反序列化成具体的类?
【问题讨论】:
-
你需要指定@JsonTypeInfo (stackoverflow.com/a/11798485/1976843)
-
正确,@JEY。谢谢 !请作为答案发布,以便我关闭。
-
我发表了我的评论作为答案。
标签: java jackson polymorphism