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

Cannot get JSON data from Jersey GET response

我正在开发一个 restful 网络客户端并试图从 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;

}

输出总是这样:{}

您不能使用 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)了。你得到一个空对象的原因是反序列化在设置器上起作用。它在 JSON 上查找与 setter 匹配的属性,并将其用于集合 属性。 JSON 对象 没有 您的 JSON 属性的设置器。