无法获取HTTP响应的JSON

时间:2018-02-15 11:50:28

标签: java

我只是想在Java 8中获取HTTP GET请求返回的JSON。我的代码:

import javax.ws.rs.client.Client;
import javax.ws.rs.client.ClientBuilder;

Client client = ClientBuilder.newClient();

Response response = client.target("https://dog.ceo/api/breeds/list/all")
        .request()
        .header("Content-type", MediaType.APPLICATION_JSON)
        .get();

String json_string = EntityUtils.toString(response.getEntity());

我在最后一行收到错误:

java: incompatible types: java.lang.Object cannot be converted to org.apache.http.HttpEntity

如何从响应中获取JSON?

我试过了:

    JSONObject jsonObject = client.target("https://dog.ceo/api/breeds/list/all")
            .request()
            .header("Content-type", MediaType.APPLICATION_JSON)
            .get(JSONObject.class);

    System.out.println("jsonObject is " + jsonObject);

我收到错误:

javax.ws.rs.client.ResponseProcessingException: org.glassfish.jersey.message.internal.MessageBodyProviderNotFoundException: MessageBodyReader not found for media type=application/json, type=class org.json.JSONObject, genericType=class org.json.JSONObject.

我也尝试过:

    Response response = client.target("https://dog.ceo/api/breeds/list/all")
            .request()
            .header("Content-type", MediaType.APPLICATION_JSON)
            .get();

    System.out.println(response.getEntity().toString());

我得到:     org.glassfish.jersey.client.internal.HttpUrlConnector$2@350d3f4d

这个基本的东西怎么样 - 从响应中获取JSON - 是如此困难?

2 个答案:

答案 0 :(得分:0)

问题在于这一部分:

// [...]
String json_string = EntityUtils.toString(response.getEntity());

尝试这样做:

// [...]
String json_string = EntityUtils.toString((HttpEntity) response.getEntity());

但这只是一个猜测,因为我没有运行代码我无法测试它。

答案 1 :(得分:0)

可以尝试使用response.readEntity(String.class)response.readEntity(HttpEntity.class)https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/Response.html#readEntity-java.lang.Class- 这应该给你一个你可以使用的类型。

编辑: response.readEntity(String.class)最终确实有效。