我正在编写一个使用RestService的客户端,我必须从响应中读取一个实体,我完全困惑应该使用两种方法(getEntityreadEntity)。

每当我收到WebApplicationException时,都必须检索该实体。

因此,我的代码或多或少看起来像。

catch(WebApplicationException ex) {
// Do something with ex.getResponse
}

从我测试过的
ex.getResponse().hasEntity() ---> true

ex.getResponse().getEntity() == null ---> true

我不知道它是如何工作的,但是如果第一个陈述是正确的,那么第二个陈述可能是真实的。

令人惊讶的是,readEntity对我来说工作正常,并且我能够阅读
实体从响应中退出。

但是,在通过readEntity读取实体之后,

这个电话给假。
 ex.getResponse().getEntity() == null --> false

有人可以帮助我了解幕后的真实情况吗?

最佳答案

此行为记录在API中:
public abstract <T> T readEntity(Class<T> entityType)使用支持将消息实体流映射到请求的类型的MessageBodyReader,将消息实体输入流作为指定Java类型的实例读取。
[...]
从此方法返回的消息实例将被缓存,以便通过getEntity()进行后续检索。

第一次调用ex.getResponse().getEntity()为null,因为尚未读取该实体。调用readEntity()后,将返回已解析的实体,与getEntity()解析的一样。

07-24 02:37