2013-06-03 3 views
8

Ich habe einen DTO wie folgt aus:Ist es möglich, JSON zu Java DTO zu serialisieren/deserialisieren, wobei zusätzliche Felder in eine Karte eingefügt werden?

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

Ich möchte es zum/vom folgenden JSON serialisiert:

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

Wer weiß, wie dies mit Jackson oder Genson zu tun? Grundsätzlich möchte ich automatische Typkonvertierungen für die Felder, die im DTO deklariert sind, aber irgendwelche "Extras", um in die Params Map zu gelangen.

+2

Mit Jackson Streaming-API und eine Builder-Klasse für 'foo', ja, es ist möglich. Ich glaube, Jackson hat sogar die Möglichkeit, "den Rest" von nicht zugeordneten Mitgliedern in eine "Map " zu schlucken, aber ich habe das nie benutzt ... – fge

+0

könnte man auch gson ausprobieren (aber es funktioniert für draft3 version) – Chris

+0

@David: Ich bin neugierig auf Ihren Anwendungsfall fordern diese Art von JSON-Struktur. Was wäre, wenn 'params' einen Schlüssel mit dem Namen' bar' hätte? – nadirsaghar

Antwort

4

Dank @fge für mich auf dem richtigen Weg. Jackson hat @JsonAnySetter und @JsonAnyGetter Anmerkungen, die verwendet werden können, dies zu tun:

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; } 
} 
Verwandte Themen