2013-06-03 29 views
8

Tôi có một DTO như thế này:Có thể tuần tự hóa/deserialize JSON thành Java DTO với các trường bổ sung đi vào bản đồ không?

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

Tôi muốn nó để serialize đến/từ các JSON sau:

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

Có ai biết làm thế nào để làm điều này bằng Jackson hay Genson? Về cơ bản, tôi muốn chuyển đổi loại tự động cho các trường được khai báo trong DTO nhưng bất kỳ "extras" nào để đi vào bản đồ params.

+2

Sử dụng API truyền trực tuyến của Jackson và lớp trình tạo cho 'Foo', có, có thể. Tôi tin rằng Jackson thậm chí còn có khả năng nuốt "phần còn lại" của các thành viên chưa được ánh xạ vào một "Bản đồ ", tuy nhiên tôi chưa bao giờ sử dụng ... – fge

+0

bạn có thể thử gson (nhưng nó hoạt động cho phiên bản draft3) – Chris

+0

@David: Tôi tò mò về trường hợp sử dụng của bạn yêu cầu loại cấu trúc JSON đó. Điều gì sẽ xảy ra nếu 'params' có khóa với tên' bar'? – nadirsaghar

Trả lời

4

Cảm ơn @fge đã giúp tôi đi đúng hướng. Jackson có các chú thích @JsonAnySetter và @JsonAnyGetter có thể được sử dụng để thực hiện việc này:

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; } 
} 
Các vấn đề liên quan