Десериализация RestTemplate JSON - PullRequest
0 голосов
/ 06 марта 2019

так что давайте предположим, что у нас есть две системы (система A и система B), которые обмениваются информацией в JSON, однако, ребята из System B не хотят быть по-настоящему кооперативными и утверждают, что все с их полезной нагрузкой в ​​порядке, потому что это«синтаксически» правильный JSON.

Теперь давайте предположим, что у вас есть следующая структура json

   {
    "INFO": {
        "Animal": {
            "Cat": {}
        }
    }
   }

Это действительно допустимый JSON, но дело в том, что вы можете иметь одно или несколько животных,поэтому в сценарии с большим количеством животных полезная нагрузка составляет:

   {
    "INFO": {
        "Animal": [{
            "Cat": {},
"Dog" :{}
        }]
    }
   }

Только на этот раз, как вы можете видеть, объект Animal на самом деле является массивом объектов ... поэтому система A использует RestTemplate для анализа ответа и имеетпроблемы, поскольку «синтаксически» правильный JSON каждый раз различается по структуре.Кроме того, в JSON могут также возникать ОШИБКИ - в случае ошибок JSON выглядит следующим образом: "ERRORS" : {[error1, error2, etc.]},

, но в случае отсутствия ошибок это выглядит как

"ERRORS" : ""

Так скажите мнепожалуйста, я не прав, что хочу, чтобы полезная нагрузка была согласованной и получал, как всегда, массив объектов, независимо от того, один или много, и не получал узел ошибок в случае отсутствия ошибок, или я что-то упустил?

Я использую RestTemplate и

, когда полезная нагрузка поставляется с одним Animal (мой pojo ожидает 1 или много) -> он не работает, так как не может проанализировать отдельный объект в списке массивов.

, если яизмените его так, чтобы он ожидал только одного животного - оно терпит неудачу, когда приходит более одного.

Более того - «ОШИБКИ»: «» обрабатывается как строка, которая снова вызывает проблемы с анализом.

Итак, есть ли какой-нибудь "хакерский" способ сделать десериализатор Джексона в RestTemplate для обработки этого "синтаксически" правильного JSON, или общая структура JSON должна быть уточнена и согласована (мое мнение)

Спасибо!

1 Ответ

1 голос
/ 06 марта 2019

Похоже, вы хотите включить DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY в вашем ObjectMapper:

ObjectMapper mapper = new ObjectMapper()
mapper.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
...