2014-02-06 55 views
3

我寫上了Spring Web MVC /春HATEOAS之上的API,即使簡單的類層次結構的反序列化的工作就像一個魅力,我不能管理反序列化的Json投入使用傑克遜正確的類型。 這裏是我的類層次結構:傑克遜繼承和反序列化

public class A { 
    protected String fieldA; 
} 

public class B extends A { 
    protected String fieldB; 
} 

public class C extends A { 
    protected String fieldC; 
} 

之前大家送我到SO許多其他類似的問題,這裏的主要區別是,A是混凝土。換句話說,傑克遜必須通過使用json字段作爲領帶破壞者來選擇3個實現。

基本上,我怎麼可以配置傑克遜將它反序列化:

{ 
    "fieldA": "asdf" 
} 

到A的一個實例,

{ 
    "fieldA": "asdf", 
    "fieldB": "asdf" 
} 

到B的一個實例?

回答

3

沒有辦法自動做到這一點:所有的自動多態類型的處理依賴於某種類型的區分(type屬性,最常見的)。要求使用基於內容的啓發式技術的能力,但迄今爲止沒有人提出實現這種功能的可行計劃(或貢獻)。

要處理它,你可能需要編寫自定義JsonDeserializer並檢測輸入自己。這可能是可以使用ConvertingDeserializer,讓傑克遜綁定JSON到JsonNodejava.util.Map第一,然後就自己解壓。