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

时间:2018-06-11 12:14:33

标签: rest jax-rs java-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$1 cannot be cast to java.lang.String

请不要使用Java 1.6版本,我无法从Response类中找到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);

请协助解决此问题

2 个答案:

答案 0 :(得分:0)

readEntity()方法可行:

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

我不明白为什么你说这种方法不适用于你:JAX-RS 2.0(Java EE)中也引入了ClientBuilder类(就像readEntity()方法一样) 7)作为Client API的一部分。

你是否在类路径中有任何JAX-RS 1.x依赖项?

答案 1 :(得分:0)

如果我们不使用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;
        }
    }