2017-11-18 24 views
0

に多くのJsonProperty名でJSONレスポンスを消費することができ、私はジャクソン注釈を含むJavaでRestTemplateを使用してJSONレスポンスを消費しようとしている、と私はそうのような多くの名前のプロパティを持っているリソースがあります。はどのように私は、Java

{ 
     -name1:{ 
      id:2, 
      price:12, 
      name:"Bob: 
     }, 
     -name2:{ 
      id:111, 
      price:1.1, 
      name:"Ron: 
     }, 
     -name3:{ 
      id:10, 
      price:33, 
      name:"jhon: 
     }, 
    } 

このようなリストは次のようになります。 これはNAME1オブジェクトと同様に、エンティティのいずれかを取得する方法の私のコードです:

public class Class1 { 
    private RestTemplate restTemplate; 
    private String url = "https://url.com/api"; 
    private Response response; 
    private Market market ; 
    public class1(){ 
     restTemplate = new RestTemplate(); 
     response = restTemplate.getForObject(url,Response.class); 
    } 
    @Override 
    public Market getResults() { 
     market = response.getResult(); 
     System.out.println(Market); 
     return null; 
    } 
} 

とレスポンスクラスそれほどのようなものです:私は配列としてこれらすべての要素を取得する方法

@JsonIgnoreProperties(ignoreUnknown = true) 
@Getter 
@Setter 
@NoArgsConstructor 
public class Response { 
    @JsonProperty("name1") 
    private Market result; 
} 

またはArrayList? このAPIはサードパーティのウェブサイトからのものであり、Jsonレスポンスには多くのエンティティが存在しています。ありがとうございます。

+0

私は、SpringのRestTemplateを使用してJsonサービスを使用する同じユースケースを実行しました。 - 消費しようとしているJsonが、あなたが投稿したものとまったく同じ場合、それらはあなたが消費しようとしているサービス。だから私の目的は、あなたのプロデューサーが標準のJsonを作ることができないのであれば、訂正は消費者側ではなくプロデューサー側かもしれません " – Zorglube

答えて

0

上記のJsonでは、配列ではなくキー値のペアのリストです。

これは、アレイは、JSONで次のようになります。

{ 
    marketResults: [ 
     { 
      id:2, 
      price:12, 
      name:"Bob: 
     }, 
     { 
      id:111, 
      price:1.1, 
      name:"Ron: 
     }, 
     { 
      id:10, 
      price:33, 
      name:"jhon: 
     } 
    ] 
    } 

次に何を行っている可能性がある:

public class Response { 
    private List<Market> marketResults; 
} 

しかし、あなたの例では、地図があるため、あなたが使用する必要がありますあなたに実際に似たポストMAP

public class Response { 
    private Map<String, Object > marketResults; 
} 

Reading JSON map structure via spring boot

+0

ありがとう! は私がマップを使うとすぐにうまくいきます。 –

0

このユースケースをネイティブサポートしているGsonライブラリを使用できる場合は、 コードをきれいにして入力します。

@Getter 
@Setter 
public class Response { 
    @SerializedName(value = "name1", alternate={"name2","name3"}) 
    private Market result; 
} 

@SerializedName Gsonで同等@JsonPropertyです。