Я пытаюсь использовать службу REST с помощью RestTemplate. У меня возникают проблемы с десериализацией ответа JSON. Я использую собственный Deserializer, и у моего JSON есть 3 узла, но похоже, что только один достигает десериализатора. Ниже приведены более подробные сведения.RestTemplate - Deserializer Jackson
Ниже приводится ответ JSON:
{
"Hello": {
"Hi": "Name1",
"Call": "PhoneNumber1"
},
"Hello": {
"Hi": "Name2",
"Call": "PhoneNumber2"
},
"Hello": {
"Hi": "Name3",
"Call": "PhoneNumber3"
}
}
Я использую пользовательский десериализатор на класс Response для атрибута Привет с помощью @JsonDeserializer.
Когда я сделать readTree, как показано ниже:
JsonNode node = jp.getCodec().readTree(jp);
достигает метода десериализации, похоже, что он испытывает только один узел, вместо 3, как показано ниже. Иногда он имеет первый узел, а иногда и последний. Что здесь может быть не так?
Заранее благодарим за этот вопрос и помощь!
ANSWER: Как уже упоминалось, этот JSON недействителен, и, следовательно, Джексон не может десериализовать его. Я должен был получить ответ как String, а затем десериализовать вручную.
Я потребляю услугу, которая существует в производстве сегодня и используется в других местах. Могу ли я преобразовать JSON в массив после получения ответа? – mandy
Извините, это никогда не будет работать с Jackson imho, поскольку ObjectNode считается уникальным. –
Единственный способ сделать это - это полный пользовательский десериализатор без использования древовидных методов, но вместо этого будет синтаксический анализ с использованием 'getCurrentToken()', 'get ... Value()' и 'nextToken()'. Разбор этого типа списка или нескольких карт. Будет много работы, но может работать в конце. –