javax.ws.rs.core.Response 转换为 java1.6 中的字符串

javax.ws.rs.core.Response convert to string in java1.6

我想将 Response 转换为字符串

Response response  = ClientBuilder.newBuilder().sslContext(sslContext).build().target(url)
                        .request(MediaType.APPLICATION_JSON).get();

// I have tried as below.. It didn't work
String result = (String)response.getEntity();

错误是java.lang.ClassCastException: org.glassfish.jersey.client.HttpUrlConnector cannot be cast to java.lang.String

请注意,我使用的是 Java 1.6 版本,我无法从 Response class 中找到 readEntity(String.class) 和 getEntity(String.class) 等方法。

另一种方法如下所示,方法是在 get 中给出 String.class。 但是我首先需要 Response 对象来检查状态代码,然后我想将它转换为 String。

String response =     ClientBuilder.newBuilder().sslContext(sslContext).build().target(url)
                                .request(MediaType.APPLICATION_JSON).get(String.class);

请协助解决此问题

readEntity() 方法是要走的路:

Response response = ...
String value = response.readEntity(String.class);

我不明白你为什么说这种方法不适合你:ClientBuilder class(就像readEntity() 方法)也作为 Client API.

的一部分在 JAX-RS 2.0 (Java EE 7) 中引入

class路径中没有任何 JAX-RS 1.x 依赖项吗?

如果我们不使用 Jersey 客户端 jar,则我们不会获取 readEntity(class) 和 getEntity(class)。这些方法不是 javax.ws.rs.core.Response 的一部分,它们是 Jersey clientjar 的一部分。所以如果我们使用javax.ws.rs.core.Response,那么我们必须手动转换如下

    javax.ws.rs.core.Response response; 
    String result = readInputStreamAsString((InputStream) response.getEntity());

public static String readInputStreamAsString(InputStream in) {
        try {
            BufferedInputStream bis = new BufferedInputStream(in);
            ByteArrayOutputStream buf = new ByteArrayOutputStream();
            int result = bis.read();
            while (result != -1) {
                byte b = (byte) result;
                buf.write(b);
                result = bis.read();
            }
            return buf.toString();
        } catch (IOException ex) {
            return null;
        }
    }