我正在编写一个使用RestService的客户端,我必须从响应中读取一个实体,我完全困惑应该使用两种方法(getEntity
与readEntity
)。
每当我收到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()
解析的一样。