我正在编写一个客户端来使用 RestService,我必须从响应中读取一个实体,我完全搞不清楚这两种方法中的哪一种(getEntity
vs 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
有人可以帮助我了解幕后真正发生的事情吗?
最佳答案
Response
类有两个用途:服务器端和客户端。在服务器端,它称为出站 响应。在客户端,它是入站响应。
出境
@GET
public Response get() {
MyModel model = new MyModel();
return Response.ok(model).build();
}
入境
Response response = ClientBuilder.newClient().target(url).request().get();
getEntity()
方法用于服务器端,因为您想要获取实体对象。对我们来说用处不大,但是Jersey会用它来获取实体对象,在发送出去之前将其序列化。
readEntity()
方法将在客户端使用,因为您正在尝试读取 实体流。如果您尝试在服务器端调用它,您将收到一条错误消息,提示您无法读取出站响应中的流。
就您遇到的行为而言,我真的无法解释为什么他们会这样实现。
关于java - 响应中的 GetEntity 与 ReadEntity (Javax.ws.rs),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48781860/