2013-01-23 157 views
1

反序列化派生類我有一個基類,如下所示:使用傑克遜的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 
} 

我發送串行化JSON字符串CriteriaGroup類到服務器使用傑克遜(de)序列化。並在服務器上的服務看起來像:

@Consumes(MediaType.APPLICATION_JSON) 
@Produces(MediaType.APPLICATION_JSON) 
public Response createCriteriaGroup(CriteriaGroup criteriaGroup) {... 

然而,傑克遜並沒有反序列化JSON轉換爲一個派生類。如何根據type字段Criteria類來實現此映射?

謝謝..

反序列化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: [email protected]; 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) 

....

+0

你有例外嗎? – micha

+0

添加了異常的開始,當我有一個ConditionCriteria類的反序列化 – suat

+0

這是類似於你的問題? http://stackoverflow.com/questions/1325074/using-jackson-objectmapper-to-serialize-the-subclass-name-into-json-not-the-sup –

回答

0

您需要在Criteria添加@JsonTypeInfo,以啓用的附加類型信息,以支持多態類型。你應該能夠找到的例子(只是谷歌「傑克遜JsonTypeInfo」)。