On Tue, Apr 16, 2019 at 1:05 PM Chris C <[email protected]> wrote:
> I have a map of type
>
> Map<Key1, Map<Key2, Integer>>
>
> that I want to serialize to json to store in as a field in a database
> record.
>
> Key1 and Key2 are my own classes with getters defined and the constructors
> annotated as JsonCreators.
>
> I have been able to process single level maps for the same purpose by
> configuring the type factory for the object mapper, but I am unsure how to
> go about it for nested maps with different keys.
>
There are 2 challenges:
1. Expressing `JavaType` to use for deserialization (serialization is
usually fine, although if you try to serialize Map as root value [Strongly
Discouraged practice!], then there too)
2. Allowing custom Map key types -- may need to register Key deserializers,
key serializers (common types like `String`, `Number` supported out of the
box)
- note: Map keys must be scalar types; read from String, written as
Strings
First one is done using `TypeFactory`, either with TypeReference:
JavaType mapRef = typeFactory.constructType(new TypeReference<Map<Key1,
Map<Key2, Integer>>>) {} ())
Or constructing it in two parts, something like
JavaType mapRef = typeFactory.constructMapType(Map.class,
typeFactory.constructType(Key1.class),
typeFactory.constructMapType(Map.class,
typeFactory.constructType(Key2.class),
typeFactory.constructType(Integer.class)));
Second part may be more involved, but if you have already handled
non-nested maps with custom types, you probably know how that works.
-+ Tatu +-
--
You received this message because you are subscribed to the Google Groups
"jackson-user" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
For more options, visit https://groups.google.com/d/optout.