У меня есть файл в формате JSON (что я не имею никакого контроля над), который выглядит следующим образом:Джексон JsonTypeInfo для содержания HashMap <String, Object>
{
"some-identifier": {
"@class": "some-prefix.ClassA",
"<classA-property1>": "value1",
"<classA-property2>": "value2",
},
"some-other-identifier": {
"@class": "some-other-prefix.ClassB",
"<classB-property1>": <... possibly nested objects ...>
},
<...>
}
(The CLASSA-свойство и ClassB-свойства являются фактические имена членов ClassA и ClassB соответственно.)
Я хотел бы десериализовать это в HashMap (сопоставление каждого идентификатора с фактическим объектом), и я хочу использовать собственный TypeIdResolver для определения фактического класса, который будет создан (который я могу определить из префикса и имени класса). Затем сами объекты следует десериализовать, используя десериализатор по умолчанию.
После долгих поисков я не смог выполнить эту работу. Мне нужно каким-то образом аннотировать HashMap, чтобы установить JsonTypeInfo и JsonTypeIdResolver для его содержимого. Все примеры, которые я видел до сих пор, имеют те аннотации по базовому типу, из которых простираются все подклассы. Однако в моем случае нет общего родительского класса для классов, содержащихся в JSON (за исключением Object of course). Я подумал о том, что аннотировать сам объект с помощью mixin, но даже тогда это нарушит десериализацию по умолчанию для содержащихся объектов, так как тогда он ожидает свойство @class для всех дочерних объектов.
Есть ли решение для этого сценария?