2017-11-18 202 views
0

我想要消耗与杰克逊注释Java中使用RestTemplate JSON响应与许多JsonProperty名JSON响应,我有许多有名称的属性,像这样的资源:我怎么能消耗在Java

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

和这个名单继续这样下去。 这是我如何得到的实体之一,像名1对象代码:

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完全相同,则它们是你正在尝试使用的服务。所以我的目的是:如果你的制片人不能生产标准的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@JsonProperty相当于GSON。