Ich versuche, einen Rest-Service mit RestTemplate zu konsumieren. Ich habe Probleme beim Deserialisieren der JSON-Antwort. Ich benutze einen benutzerdefinierten Deserializer und mein JSON hat 3 Knoten, aber es sieht so aus, als ob nur einer den Deserializer erreicht. Unten sind mehr Details.RestTemplate - Jackson Deserializer
Unten ist die Antwort JSON:
{
"Hello": {
"Hi": "Name1",
"Call": "PhoneNumber1"
},
"Hello": {
"Hi": "Name2",
"Call": "PhoneNumber2"
},
"Hello": {
"Hi": "Name3",
"Call": "PhoneNumber3"
}
}
ich auf die Antwort der Klasse eines benutzerdefinierten Deserializer bin mit für Attribut Hallo mit @JsonDeserializer.
Wenn ich ein readTree wie unten tun:
JsonNode node = jp.getCodec().readTree(jp);
es erreicht die deserialize Methode, es sieht aus wie es nur ein Knoten aufweist, wird anstelle von 3 wie unten. Manchmal hat es den ersten Knoten und manchmal den letzten. Was könnte hier schiefgehen?
Vielen Dank im Voraus für diese Frage und helfen aus!
ANTWORT: Wie bereits erwähnt, ist dieser JSON ungültig und daher kann Jackson ihn nicht deserialisieren. Ich musste die Antwort als String bekommen und dann manuell deserialisieren.
Ich nehme einen Service in Anspruch, der heute in der Produktion existiert und an anderen Orten eingesetzt wird. Kann ich den JSON nach Erhalt der Antwort in ein Array konvertieren? – mandy
Tut mir leid, das wird nie mit Jackson imho funktionieren, da es sich bei ObjectNode um eindeutige Schlüssel handelt. –
Die einzige Möglichkeit, dies zu tun, wäre ein vollständiger benutzerdefinierter Deserializer, ohne Tree-Methoden zu verwenden, sondern stattdessen mit 'getCurrentToken()', 'get ... Value()' und 'nextToken()' zu analysieren. Ein Parse zu einer Liste oder einem Multi-Map-Typ. Wird eine Menge Arbeit sein, könnte aber am Ende arbeiten. –