Thanks for your answer.

Without the any setter/getter but with JsonTypeInfo on the map field, the 
@class are added to every entries at the exclusion of the java types 
mappable into json (so Long at its @class). But List<Integer> still have 
its @class. 
Without the any setter/getter, without JsonTypeInfo on the map field but 
with JsonTypeInfo on all the pojo classes that can be inserted into the 
map,  the @class are only added to those entries but at the deserialization 
the entry having @class are not recovered but transformed into a map 

I end up writing my own serializer / deserializer :)
https://gist.github.com/nithril/b55d6ab32db253dfe24995f87c899685


Le lundi 18 juillet 2022 à 19:23:17 UTC+2, [email protected] a écrit :

> On Mon, Jul 18, 2022 at 4:47 AM Nicolas Labrot <[email protected]> wrote:
> >
> > I think for the moment I will try to create a custom serializer / 
> deserializer for my properties map
> > - Serializer: introspect the map and build JavaType then call the 
> appropriate serialize
> > - Deserializer: convert first into a TreeNode and then introspect the 
> TreeNode (basically, if map and @type then try to create the associated 
> deserializer)
> >
>
> Ok so:
>
> 1. No, I don't think there is a way to make Polymorphic handling work
> with "Any" properties with `Object` as value
> 2. But if you just have `Map<String,Object>`, you SHOULD be able to
> simply use `@JsonTypeInfo` annotation on Map property (field or
> accessor)
>
> So I would first try (2), I think.
>
> It _might_ just work with `@JsonValue` as well, if you needed
> "JsonAnySetter/Getter"-like behavior.
>
> -+ Tatu +-
>
> >
> > On Mon, 18 Jul 2022 at 12:02, [email protected] <[email protected]> wrote:
> >>
> >> Hello,
> >>
> >> I hope my question will not be another "why doesn't Jackson find 
> polymorphic type for my Map values (or List or Set)" and I hope I did my 
> best to check for any question/answer :).
> >>
> >> I have a bean with an any field:
> >> @JsonAnyGetter
> >> @JsonAnySetter
> >> protected Map<String, Object> properties = new HashMap<>();
> >>
> >> When initializing the map with:
> >> properties.put("foo", new FooBean());
> >> properties.put("foos", List.of(new FooBean()));
> >> properties.put("long", 123);
> >> properties.put("longs", List.of(123));
> >> properties.put("longss", List.of(List.of(123)));
> >>
> >> I want to produce:
> >> {
> >> "foo": {
> >> "@class": "org.FooBean", "foo": "bar"
> >> },
> >> "foos": [
> >> {
> >> "@class": "org.FooBean", "foo": "bar"
> >> }
> >> ],
> >> "long": 123,
> >> "longs": [123, 567],
> >> "longss": [[123], 567]
> >> }
> >>
> >> ie. a type for bean but not for primitive or collection/map.
> >>
> >> Is this use case achievable by using jackson? To quote that post if 
> there'd be an option that says, if there is a type attribute at the 
> beginning, create this type, rather than a natural one.
> >>
> >> Thanks for your help
> >>
> >> Nicolas
> >>
> >>
> >>
> >> --
> >> You received this message because you are subscribed to a topic in the 
> Google Groups "jackson-user" group.
> >> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/jackson-user/abEAvuiMeac/unsubscribe.
> >> To unsubscribe from this group and all its topics, send an email to 
> [email protected].
> >> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/f62bae35-a14e-4f9f-b152-6bfcf2e83873n%40googlegroups.com
> .
> >
> > --
> > 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 view this discussion on the web visit 
> https://groups.google.com/d/msgid/jackson-user/CAEWXQ0oD_Xb%2B9pve35uzmsTWgvfMqT%2BDzaDNSb7kHROyPpQCgw%40mail.gmail.com
> .
>

-- 
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 view this discussion on the web visit 
https://groups.google.com/d/msgid/jackson-user/656951e7-25c1-4446-be91-faa56fb615fdn%40googlegroups.com.

Reply via email to