[英]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.