Полиморфная десериализация с Джексоном, в то время как 'type' и 'value' являются разделенными полями - PullRequest
0 голосов
/ 20 октября 2019

API возвращает следующий JSON:

"objectA":{
  "type":"typeA",
  "value":{
    "propertyA":{
      "propertyAA":"3000",
      "propertyAB":3
    },
    "propertyB":10
  }
}

В то время как «тип» может быть широким диапазоном классов, а поле «значение» содержит свойства этого объекта. Есть ли в Джексоне готовое решение на основе аннотаций для решения этой проблемы?

До последнего обновления провайдера API API возвращал:

"objectA": {"type": "typeA", "propertyA": {"propertyAA": "3000", "propertyAB": 3}, "propertyB": 10}

Что мне удалосьсинтаксический анализ с использованием:

@JsonTypeInfo(use = JsonTypeInfo.Id.NAME, include = JsonTypeInfo.As.PROPERTY, property = "type")
@JsonSubTypes({ @Type(value = TypeA.class, name = "typeA"),
[...]

Как указано выше, мне интересно, есть ли конфигурация Джексона, которая позволяет конфигурировать и поле, содержащее тип, и поле, которое содержит фактический объект.

Большое спасибо и наилучшие пожелания!

1 Ответ

0 голосов
/ 01 ноября 2019

Я временно решил эту проблему, введя объект-оболочку, который обрабатывает поля 'type' и 'value'. Для поля 'value' я использовал подход "EXTERNAL_PROPERTY", как показано здесь: Jackson JsonTypeInfo.As.EXTERNAL_PROPERTY не работает должным образом

Работает, но все еще не чувствует себя очень чистым:( Так что, если кто-то знает лучший подход, пожалуйста, поделитесь им!:)

...