Десериализация json массив с различными объектами - Джексон / пружина - PullRequest
1 голос
/ 14 апреля 2020

У меня есть странная json строка массива:

[
  {
    "schema": "Cancel",
    "version": "1.0.0"
  },
  {
    "mandatory": true,
    "id": "uuid"
  }
]

Она выглядит как массив двух разных объектов, таких как:

class Object1 {
private String schema;
private String version;
}

и

class Object2{
private boolean mandatory;
private String id;
}

когда я вызываю шаблон Spring Rest, например:

restTemplate.exchange(url, HttpMethod.GET, new HttpEntity<>(), ObjectFull[].class)
                .getBody();

Где ObjectFull - это объект с полями из этих двух предыдущих объектов (Object1, Object2).

Я получаю массив из двух объектов , Первый имеет несколько полей, а второй имеет другие. Все работает как надо.

Однако я считаю, что ответ здания, используя objectFull[0].getSchema(), недостаточно хорош.

Есть ли возможность использовать аннотации Джексона для объединения этих двух объектов в один тщательный процесс десериализации? ?

А вместо двух элементов массива ObjectFull[] получить простой ObjectFull со всеми полями?

Ответы [ 2 ]

0 голосов
/ 20 апреля 2020

Способ решения этой проблемы заключается в создании класса:

import com.faster xml .jackson.databind.JsonDeserializer;

publi c Класс ObjectFull расширяет JsonDeserializer

и реализовать необходимые методы

0 голосов
/ 14 апреля 2020

Поскольку json является представлением списка, вы не можете десериализовать два объекта из него в один со всеми заполненными полями. Если вы точно знаете, что вы всегда будете получать список с двумя объектами (которые дополняют друг друга), вы можете написать простую функцию, которая получает это json и читает список, а затем создает объект, в котором вы устанавливаете поля с помощью значения из обоих элементов списка и возвращаемый объект.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...