I am trying to deserialize a rather complex POJOs JSON, where I would need to define a specific property-name to type resolution, but yet faild fininding this rather simple feature.
assume a class like:
class Example {
int id;
Map<String,Object> extras;
}
and Jackson is serializing the POJO correctly to JSON where the map is serialized to a key-value map just like expected:
{...
id:5,
extras:{object1:{...}, object2:{...}}
...}
now I would like to tell Jackson to explicitly deserialize the extras objects by their actual type. So I need to tell Jackson somehow to map "object1" to Type A and "object2" to type B.
Is this possible? Thanks.
There is nice guide how to deal with it: http://www.cowtowncoder.com/blog/archives/2010/03/entry_372.html
And another tutorial:
http://programmerbruce.blogspot.de/2011/05/deserialize-json-with-jackson-into.html
The 6th example from the second tutorial could be modified and deserializer would have loop with something similar to:
Map<String, Class> types = ...// map of supported types
JsonToken token = jsonParser.nextToken();
if(token == JsonToken.FIELD_NAME){ // "object1" etc.
String name = jsonParser.getCurrentName();
Class type = types.get(name);
Object object = jsonParser.readValueAs(type);
}
The easiest way is to enable so-called "default typing" -- it does roughly equivalent of adding @JsonTypeInfo
annotation (which enables support polymorphic type handling) -- and this adds type information in values. So:
ObjectMapper mapper = new ObjectMapper();
mapper.enableDefaultTyping();
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With