当前位置: 首页 > 知识库问答 >
问题:

从post请求读取JAX-RS客户端中的响应体

都浩淼
2023-03-14

在移动应用程序和Web服务之间有某种代理,我们在发出发布请求时对响应感到困惑。我们收到状态为200: OK的响应。但是我们找不到/提取JSON响应正文。

    Client client = ClientBuilder.newClient();
    WebTarget webTarget = client.target(WEBSERVICE_BASE_LOCATION + "mobileDevices?operatorCode=KPNSCP");
    String jsonString = "{\"osVersion\":\"4.1\",\"apiLevel\":16,\"devicePlatform\":\"ANDROID\"}";
    Builder builder = webTarget.request();
    Response response = builder.post(Entity.json(jsonString));

我们正在使用JAX-RS。有人能提供一些提示,从服务器响应中提取JSON主体(字符串)吗?


共有3个答案

花飞尘
2023-03-14

对于我的用例,前面的答案都不起作用,因为我正在编写一个服务器端单元测试,该测试由于以下错误消息而失败,如无法模拟Glassfish泽西客户端响应对象问题中所述:

java.lang.IllegalStateException: Method not supported on an outbound message.
at org.glassfish.jersey.message.internal.OutboundJaxrsResponse.readEntity(OutboundJaxrsResponse.java:145)
at ...

以下代码行出现此异常:

String actJsonBody = actResponse.readEntity(String.class);

解决方法是将问题代码行转化为:

String actJsonBody = (String) actResponse.getEntity();
周高畅
2023-03-14
匿名用户

我刚刚为jaxrs-ri-2.16找到了一个解决方案-只需使用

<代码>字符串输出=响应。readEntity(String.class)

这将按预期交付内容。

顾嘉德
2023-03-14

试试这个:

String output = response.getEntity(String.class);

编辑

感谢@Martin Spamer提到它将适用于Jersey 1。仅限x罐。对于球衣2。x使用

String output = response.readEntity(String.class);
 类似资料:
  • 问题内容: 在移动应用程序和Web服务之间具有某种代理,发出发布请求时的响应使我们感到困惑。我们收到状态为200的回复:OK。但是我们找不到/提取JSON响应主体。 我们正在使用JAX-RS。有人可以提供一些提示来从服务器响应中提取JSON正文()吗? 问题答案: 试试这个: 编辑 感谢@Martin Spamer提及它仅适用于Jersey 1.x罐子。适用于Jersey 2.x

  • 我通过一个spring上下文注入了一个JAX RS客户端,如下所示: 在成功响应(200、202、204)的情况下,如何访问响应状态?

  • 我使用这个代码来调用泽西客户端的泽西JAX-RS服务。 当响应状态代码为 200 时,此代码工作正常。但对于 200 以外的任何内容,此代码会引发异常。 如何修改此代码,以便根据响应的状态代码执行某些操作?

  • 我正在使用泽西JAX-RS客户端(版本2.0)。我知道它使用Jackson ObjectMapper来生成和解析JSON。我想使用相同的对象为一些java类生成JSON,这样我就可以将它们写入日志。 我知道我可以创建一个新的ObjectMapper实例,但我更喜欢请求泽西客户端给我一个它正在使用的引用。我该怎么做呢?泽西2.0知道Jackson,因为它包含一个JacksonFeature类,该类首

  • 问题内容: 我编写了简单的REST Web服务客户端类,该类使用JAX-RS 2.0客户端API发出REST请求。我试图弄清楚如何为每个调用设置请求超时。这是请求的代码: 问题答案: 为此,您可以先创建一个ClientConfig,然后在创建新客户端时将其作为参数提供。

  • 我已经创建了一个简单的Jersey客户端,它能够成功地使用有效负载执行POST请求。但现在它正在等待来自httpendpoint的响应: 问:代码是否有可能不等待响应。 我试图阅读泽西客户端文档,以确定我的代码是否有可能不等待响应?我看到我们只能在读取响应后关闭连接,但在我的情况下没有用。我想在将有效负载发布到endpoint后立即关闭连接。 我只需要触发并忘记POST请求,因为我不关心响应。这是