RestTemplateを使用してRESTサービスを使用しようとしています。 JSONレスポンスをデシリアライズするのに問題があります。カスタムDeserializerを使用していますが、JSONには3つのノードがありますが、デシリアライザに到達するのは1つだけです。以下は詳細です。以下はRestTemplate - Jackson Deserializer
レスポンスJSONは次のとおりです。
{
"Hello": {
"Hi": "Name1",
"Call": "PhoneNumber1"
},
"Hello": {
"Hi": "Name2",
"Call": "PhoneNumber2"
},
"Hello": {
"Hi": "Name3",
"Call": "PhoneNumber3"
}
}
私は@JsonDeserializerを使用して属性こんにちはためレスポンスクラスのカスタムデシリアライザを使用しています。
iは以下のようreadTreeを行う:
JsonNode node = jp.getCodec().readTree(jp);
それは以下のように唯一のノードの代わりに3を有しているように見える、デシリアライズする方法に到達します。場合によっては最初のノードがあり、時には最後のノードもあります。ここで何がうまくいかないのでしょうか?
この質問をご覧になり、助けてくれてありがとうございます!
ANSWER: 他にも述べたように、このJSONは無効であるため、ジャクソンはそれをデシリアライズできません。レスポンスをStringとして取得して、手動で逆シリアル化する必要がありました。
私は現在、本番環境に存在し、他の場所で使用されているサービスを消費しています。応答を受け取った後、JSONを配列に変換できますか? – mandy
申し訳ありませんが、ObjectNodeが一意のキーを持つと見なされるため、Jackson imhoではこれが動作しません。 –
これを行う唯一の方法は、ツリーメソッドを使用せずに、代わりに 'getCurrentToken()'、 'get ... Value()'と 'nextToken()'を使って解析する完全カスタムのデシリアライザです。リストまたはマルチマップタイプを解析します。たくさんの仕事がありますが、最後には働くことができます。 –