我正在开发一个安静的Web客户端,并尝试从GET方法的响应中获取JSON有效负载。我正在使用泽西岛。但我无法使用response.getEntity()方法读取JSON数据。我尝试了很多方法,包括response.bufferEntity(),但输出始终保持为空。下面是我的代码和输出,此外我还可以在wireshark中捕获的响应数据包中看到JSON数据。我真的很感谢每个人都试图找出原因或提供解决方案。谢谢!
代码:
public JSONObject Get(String requestPath){
ClientResponse response = webResource.path(requestPath)
.header("Content-Type", contTypeHeader )
.header("Accept",acceptHeader)
.header("Authorization", authZ )
.get(ClientResponse.class);
response.bufferEntity();
if (!(response.getStatus() == 201 || response.getStatus() == 200)) {
throw new RuntimeException("Failed : HTTP error code : " + response.getStatus());
}
System.out.println(response.getEntity(JSONObject.class));
return null;
}
,输出总是这样:{}
答案 0 :(得分:0)
除非您拥有JSONObject
,否则无法使用MessageBodyReader
。点击JAX-RS Entity Providers了解更多信息。您当前使用的提供程序(可能是Jackson)仅支持JavaBean POJO或它们的集合。例如,如果你有这个JSON
{ "property1" : "value1", "property2": "value2" }
然后你需要像
这样的POJOpublic class Bean {
private String property1;
private String property2;
// getters and setters
}
然后你可以getEntity(Bean.class)
。你获得一个空对象的原因是反序列化工作在setter之外。它在JSON上查找与setter匹配的属性,并使用set属性设置它。 JSON对象 没有针对您的JSON属性的setter。