我正在尝试将jax-rs响应序列化为json字符串。
来自服务器的响应是json,我从泽西客户端获得它:
Response resp = target.request().method("PUT", Entity.json(payloadBean))
其中payloadBean是我的json请求。一切正常但我无法转换json字符串中的resp以便记录它。
如果我尝试:
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;
有什么想法吗?
答案 0 :(得分:5)
使用resp.readEntity(String.class)
public abstract <T> T readEntity(Class<T> entityType)
输入参数:
T
- 实体实例Java类型。<强>参数:强>
entityType
- 实体的类型。使用支持将消息实体流映射到请求类型的MessageBodyReader,将消息实体输入流作为指定Java类型的实例读取。
答案 1 :(得分:2)
最后,我需要缓冲消息实体数据,因为流被消耗了,而当我尝试重新读取响应时,我收到错误。因此,为了首先记录它然后再次使用它我必须:
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);