2017-04-11 10 views
2

jsonでREST応答を解析する必要があり、多数のオブジェクトを含む多数のネストされたリストがあります。SpringブートRestTemplateを使用してjsonリストをアンマーシャリングする方法

レスポンスには、 "ObjectA"と "ObjectB"という2つの要素の中にリストを持つ "ObjectList"という項目が含まれています。 Jacksonの注釈を使用してオブジェクトへの応答を解析する方法はわかりません。

JSONは次のようになります。まったく機能し、私はしません

@JsonIgnoreProperties(ignoreUnknown = true) 
    public class TimesheetListResponse { 

     @JsonProperty("ObjectA") 
     private List<ObjectA> objectAList; 

     @JsonProperty("ObjectB") 
     private List<ObjectB> objectBList; 

:この

ResponseEntity<Response> response = restTemplate.exchange(URL, HttpMethod.GET, request, Response.class); 
    Response response = response.getBody(); 

応答があるよう

"ObjectList": [ 
      { 
       "ObjectA": { 
        "property1": false, 
        "property2": true 
      }, 
       "ObjectB": { 
        "property1": 66, 
        "property2": true 
      }, 
      { 
       "ObjectA": { 
        "property1": false, 
        "property2": true 
      }, 
       "ObjectB": { 
        "property1": 66, 
        "property2": true 
      } 
     } 
    ] 
} 

私のコードが見えますこれをどのようにマップするかについて混乱しています。

答えて

0

お客様の要件に応じて、モデルの構造は以下のようになります。レスポンスオブジェクト内のobjectListマップ内で、ObjectA/ObjectBのインスタンスとしてキーを「ObjectA」/「ObjectB」の文字列と値として持つHas​​hMapを追加する必要があります。オブジェクト型A/Bがそこに収まるように、値型のMapをObjectとして取得しました。対応する@JsonXXXアノテーションを追加します。

public class Response { 

private List<Map<String,Object>> objectList; 

//Getters & Setters 
} 

public class ObjectB { 

String propB1; 

String propB2; 
} 


public class ObjectA { 

String propA; 

String propA1; 

} 
0

私もできるObjectAにまたはObjectBにいずれかの他のラッパーオブジェクトとしてリスト内の項目を検討します。私。

@JsonIgnoreProperties(ignoreUnknown = true) 
public final class Parent { 

    @JsonProperty("ObjectList") 
    private List<ChildWrapper> objectList = new ArrayList<>(); 
} 

@JsonIgnoreProperties(ignoreUnknown = true) 
public final class ChildWrapper { 

    @JsonProperty("ObjectA") 
    private Child ObjectA; 

    @JsonProperty("ObjectB") 
    private Child ObjectB; 
} 

@JsonIgnoreProperties(ignoreUnknown = true) 
public final class Child { 

    @JsonProperty("property1") 
    private int property1; 

    @JsonProperty("property2") 
    private boolean property2; 
} 
+0

リストの下にObjectA/ObjectBの複数の要素が存在する可能性があることに注意してください。上記の例では、それぞれ1つのインスタンスのみが可能です。 – JRR

+1

'ChildWrapper'がそれを処理します。 オブジェクト1: 'リストにおけるこれら二つのアイテム考える{ "をObjectAを":{..} }' Object2に: '{ "ObjectBに":{..} }' 両方を表すことができます。 'ChildWrapper'によって。これは、応答が 'ObjectA'か' ObjectB'のどちらかであると仮定しているだけです。 – Gabe

0

マッピングが正常だったようですが、私はArraylistを初期化するだけでした。主な問題は、私が忘れたパラメータのためにエンドポイントが空に戻っていたことでした。

関連する問題