2016-04-19 29 views
0

假設一類「Json2JavaModel」反序列化與傑克遜,在類型信息的字符串鍵

public class Jason2JavaModel { 

    public String someAttribute; 

    public Map<String, Representation> representations; 

    public String getSomeAttribute() { 
     return someAttribute; 
    } 

    public void setSomeAttribute(String someAttribute) { 
     this.someAttribute = someAttribute; 
    } 

    @JsonProperty(value = "_embedded") 
    public Map<String, Representation> getRepresentations() { 
     return representations; 
    } 

    public void setRepresentations(
      Map<String, Representation> representations) { 
     this.representations = representations; 
    } 
} 

凡表示是不同的JSON表示一個共同的基礎界面內給出一個多態性圖譜。在序列化方面,沒有問題,因爲Jackson知道實際的Java類型。但是反序列化必須做到多態。類型信息存儲在每個條目的映射鍵中(不是規範的類名,而是唯一的東西)。因此,可以提供一個密鑰字符串< - >目標類配置。有沒有辦法告訴傑克遜,它應該使用映射鍵作爲類型定義來反序列化條目值?

最好的問候, 馬呂斯

回答

0

你正在尋找一個ObjectMapper。例如,看看我對JSON POJO consumer of polymorphic objects的回答。

+0

嗨OldCurmudgeon和thx的答覆。我研究了你的解決方案,如果我們將Map 包裝到它自己的類中,比如EmbeddedRepresentationsContainer,它就可以工作。然後,我們可以將您的方法用於定製EmbeddedRepresentationsContainerDeserializer。唉這種結構變化意味着打破我們目前的API或引入更多的方法。如果可能的話,我們希望堅持使用地圖,並教導Jackson如何正確地反序列化它。 –