Jersey客户端日志响应以及getEntity

时间:2016-06-02 11:05:16

标签: java json rest jersey jersey-client

我正在使用Jersey客户端进行REST服务调用。现在,当我收到响应时,我想记录json响应,我也希望在我的响应bean中填充实体。

Client client = Client.create(config);
ClientResponse cr = client
                    .resource(endPoint)
                    .accept("application/json")
                    .get(ClientResponse.class);
clientResponse.bufferEntity();   
String responseToLog = cr.getEntity(String.class);
log.debug(responseToLog);
MyResponseBean myResponse = cr.getEntity(MyResponseBean.class);

现在的问题是我们不能两次调用getEntity(),因为第一次消耗流然后我们不能第二次使用它。因此,上面的代码给出了No content to map to Object due to end of input的例外。我相信这不是一个非常独特的要求,而且很常见。那么做同样的最佳做法或方法是什么?

1 个答案:

答案 0 :(得分:4)

修改

一个工作示例:

String endPoint = "http://localhost:8080/api/places";

Client client = new Client();
ClientResponse cr = client.resource(endPoint).accept("application/json").get(ClientResponse.class);

cr.bufferEntity(); // buffer the entity (HttpInputStream->ByteArrayInputStream)
String res1 = cr.getEntity(String.class); 

cr.getEntityInputStream().reset(); //reset the buffer, this is a ByteArrayInputStream

String res2 = cr.getEntity(String.class);//read again

参考:检查bufferEntity的来源。