java - 响应中的 GetEntity 与 ReadEntity (Javax.ws.rs)

标签 java rest jax-rs

我正在编写一个客户端来使用 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/

相关文章:

java - Apache CXF : jax-rs Client - GET Array of Objects

java - 如何将 java 参数传递给 Jenkins 中的特定从站?

rest - 如何将多个 HTTP Verb 映射到 HTTP4K 中的同一路径

rest - 升级到 Grails 2.3.0 时缺少 RESTful 请求的参数

rest - 在 Clojure Luminus 中写入文件的简单 API

model-view-controller - 无法将 JAX-RS 服务连接到 MVC 模板

spring-mvc - Spring Rest中@Context UriInfo的等价物是什么

javascript - 将 javascript 变量分配给 java 变量

java - 如何将 String[][] 获取到 Arraylist<String[][]>

java - Tomcat 无法在 Ubuntu 中从 IDE (Eclipse Luna WTP & IntelliJ IDEA) 启动