繁体   English   中英

使用Jackson Java反序列化派生类

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

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