2013-06-03 48 views
8

我有一個DTO是這樣的:是否有可能將JSON序列化/反序列化爲具有額外字段進入映射的Java DTO?

public Foo { 
    public int bar = 123; 
    public Map<String, Object> params; // key1=v1, key2=v2 etc. 
} 

我想它序列化到/從以下JSON:

{ 
    "bar": 123, 
    "key1": "v1", 
    "key2": "v2" 
} 

有誰知道如何使用這個傑克遜或Genson辦?基本上我想要在DTO中聲明的字段進行自動類型轉換,但要將任何「額外」轉換爲params地圖。

+2

使用傑克遜的流API和'Foo',是的,這可能是一個生成器類。我相信傑克遜甚至有可能將未映射成員的「剩餘部分」吞進一個「Map 」中,但是我從來沒有用過... – fge

+0

你也可以嘗試gson(但它適用於draft3版本) – Chris

+0

@David:我很好奇你的用例需要那種JSON結構。如果'params'有一個名爲'bar'的鑰匙怎麼辦? – nadirsaghar

回答

4

謝謝@fge讓我走上正軌。傑克遜@JsonAnySetter和@JsonAnyGetter標註可用於執行此操作:

public Foo { 
    public int bar; 
    private transient Map<String, Object> params = new HashMap<String, Object>(); 

    @JsonAnySetter 
    public void set(String k, Object v) { params.put(k, v); } 

    @JsonAnyGetter 
    public Map getParams() { return params; } 
} 
相關問題