簡體   English   中英

傑克遜繼承和反序列化

[英]Jackson inheritance and deserialization

我正在Spring Web MVC / Spring Hateoas之上編寫API,即使簡單類層次結構的反序列化像魅力一樣,我也無法使用jackson將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種實現方式。

基本上,我如何配置Jackson以使其反序列化:

{
    "fieldA": "asdf"
} 

到A的實例,和

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

到B的一個例子?

沒有辦法自動執行此操作:所有自動多態類型處理都依賴於某種類型的鑒別器(類型屬性,最常見)。 已經要求使用基於內容的啟發式方法的能力,但到目前為止還沒有人提出可行的計划(或貢獻)來實現這樣的功能。

要處理它,您可能需要自己編寫一個自定義JsonDeserializer並檢測類型。 也許可以使用ConvertingDeserializer ,讓Jackson首先將JSON綁定到JsonNodejava.util.Map ,然后自己解壓縮。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM