[英]Deserializing a derived class using Jackson java
我有一個基類如下:
public class Criteria {
private CriteriaType type;
//getters & setters
public enum CriteriaType {
Condition, Medication
}
}
和派生類
public class ConditionCriteria extends Criteria {
private String a;
//getters & setters
}
public class MedicationCriteria extends Criteria {
private String b;
//getters & setters
}
和另一類
public class CriteriaGroup {
Criteria criteria;
//getters & setters
}
我使用Jackson進行(反)序列化,將CriteriaGroup
類的序列化JSON字符串發送到服務器。 服務器上的服務如下所示:
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public Response createCriteriaGroup(CriteriaGroup criteriaGroup) {...
但是,JAckson不會將反序列化的JSON轉換為派生類之一。 如何根據Criteria
類的type
字段實現此映射?
謝謝..
當反序列化ConditionCriteria的JSON時,我得到一個類似的異常:
SEVERE: The exception contained within MappableContainerException could not be mapped to a response, re-throwing to the HTTP container
org.codehaus.jackson.map.exc.UnrecognizedPropertyException: Unrecognized field "a" (Class Criteria), not marked as ignorable
at [Source: org.eclipse.jetty.server.HttpInput@3c92218c; line: 1, column: 92] (through reference chain: CriteriaGroup["criteria"]->Criteria["a"])
at org.codehaus.jackson.map.exc.UnrecognizedPropertyException.from(UnrecognizedPropertyException.java:53)
at org.codehaus.jackson.map.deser.StdDeserializationContext.unknownFieldException(StdDeserializationContext.java:267)
....
您將需要在Criteria
添加@JsonTypeInfo
以啟用附加類型信息的使用,以支持多態類型。 您應該能夠找到該示例(僅Google用“ jackson JsonTypeInfo”表示)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.