无法从Jersey GET响应中获取JSON数据

时间:2016-01-06 23:16:08

标签: java json http jersey response

我正在开发一个安静的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;

}

,输出总是这样:{}

1 个答案:

答案 0 :(得分:0)

除非您拥有JSONObject,否则无法使用MessageBodyReader。点击JAX-RS Entity Providers了解更多信息。您当前使用的提供程序(可能是Jackson)仅支持JavaBean POJO或它们的集合。例如,如果你有这个JSON

{ "property1" : "value1", "property2": "value2" }

然后你需要像

这样的POJO
public class Bean {
    private String property1;
    private String property2;
    // getters and setters
}

然后你可以getEntity(Bean.class)。你获得一个空对象的原因是反序列化工作在setter之外。它在JSON上查找与setter匹配的属性,并使用set属性设置它。 JSON对象 没有针对您的JSON属性的setter。