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



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!