Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to serialize/deserialize JSON to Java DTO with extra fields going into a map?

I have a DTO like this:

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

I would like it to serialize to/from the following JSON:

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

Does anyone know how to do this using Jackson or Genson? Basically I want automatic type conversions for the fields declared in the DTO but any "extras" to go into the params map.

like image 563
David Tinker Avatar asked Jun 03 '13 19:06

David Tinker


1 Answers

Thanks @fge for putting me on the right track. Jackson has @JsonAnySetter and @JsonAnyGetter annotations that can be used to do this:

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; }
}
like image 155
David Tinker Avatar answered Nov 17 '22 08:11

David Tinker