我想将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);
请协助解决此问题
答案 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;
}
}