簡體   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