【问题标题】:Deserializing a derived class using Jackson java使用 Jackson java 反序列化派生类
【发布时间】:2013-01-23 15:20:14
【问题描述】:

我有一个基类如下:

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)

....

【问题讨论】:

标签: java jackson deserialization


【解决方案1】:

您需要在Criteria 中添加@JsonTypeInfo 以启用其他类型信息,以支持多态类型。您应该能够找到这样的示例(只需 google 搜索“jackson JsonTypeInfo”)。

【讨论】:

    猜你喜欢
    • 2012-05-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-07-07
    • 1970-01-01
    相关资源
    最近更新 更多