1

我正在尝试序列化对 json 字符串的 jax-rs 响应。

来自服务器的响应是 json,我从 jersey 客户端得到它:

Response resp = target.request().method("PUT", Entity.json(payloadBean))

其中payloadBean 是我的json 请求。一切正常,但我无法将 resp 转换为 json 字符串以记录它。

如果我尝试:

String s = EntityUtils.toString((HttpEntity) resp.getEntity());

我得到:

org.glassfish.jersey.client.internal.HttpUrlConnector cannot be cast to org.apache.http.HttpEntity

顺便说一句,如果我不强制转换为 HttpEntity,编译器会说:

toString (org.apache.http.HttpEntity) in EntityUtils cannot be applied to (java.lang.Object).

我的相关进口是:

import org.apache.http.HttpEntity;
import org.apache.http.util.EntityUtils;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Response;

有任何想法吗?

4

2 回答 2

5

利用resp.readEntity(String.class)

public abstract <T> T readEntity(Class<T> entityType)

类型参数: T - 实体实例 Java 类型。

参数: entityType - 实体的类型。

使用支持将消息实体流映射到请求类型的 MessageBodyReader 将消息实体输入流作为指定 Java 类型的实例读取。

于 2016-01-19T09:50:38.207 回答
3

最后,我需要缓冲消息实体数据,因为流已被消耗,后来当我尝试重新读取响应时出现错误。因此,为了先记录它然后再次使用它,我必须:

resp.bufferEntity();  //need to buffer entity, in order to read the entity multiple times from the Response's InputStream
String s = resp.readEntity(String.class);
于 2016-01-20T10:09:02.680 回答