是否可以将JSON序列化/反序列化为Java DTO,并将额外的字段放入映射中?

时间:2013-06-03 19:23:49

标签: java json jackson genson

我有这样的DTO:

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

我希望它能够序列化到以下JSON:

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

有人知道如何使用杰克逊或简森这样做吗?基本上我想要在DTO中声明的字段进行自动类型转换,但任何“额外”都要进入参数图。

1 个答案:

答案 0 :(得分:5)

感谢@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; }
}