【问题标题】:Okhttp convert Response to Spring ResponseEntityOkhttp 将 Response 转换为 Spring ResponseEntity
【发布时间】:2020-07-01 10:54:03
【问题描述】:

我有一个带有 POST REST api 的 Springboot 2.2 网络服务。 我正在使用 Okhttp 客户端向第三方服务发出请求。 我想将第三方服务的确切响应返回给我的 web 服务的调用者。 所有 okhttp 配方参考:

 if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);

      System.out.println(response.body().string());

我尝试在我的 api 中返回 okhttp 响应,但我只返回调用者示例:

{
    "redirect": false,
    "successful": true
} 

所以它不会插入从第三方服务返回的消息。

有谁知道如何将 Okhttp 响应对象转换为 Spring ResponseEntity 对象,以便我可以返回 http 响应代码和消息

【问题讨论】:

  • 你能把你的okhttp相关代码加到op ie中吗?您如何创建和发送/接收请求。

标签: java spring-boot httpresponse okhttp


【解决方案1】:

在这种情况下,您可以直接在 Spring-Webservice 中使用HttpServletResponse,并将 okhttp ResponseBody 给定的 InputStream 通过管道传递给HttpServletResponse 的 OutputStream。

@PostMapping(path="/my/webservice")
public void postSomething(HttpServletResponse response)throws IOException{
   okhttp3.Response redirectedResponse = redirectCall();
   if(redirectedResponse.isSuccessful())
     pipe(response.getOutputStream(), redirectedResponse.body.byteStream());
}

private void pipe(OutputStream output, InputStream input)throws IOException{
   byte chunk[] = new byte[1024];
   while(input.read(chunk, 0, 1024) != -1){
     output.write(chunk);
   }
}

【讨论】:

  • 你能解释一下pipe是如何在这里工作的吗?
  • 我添加了一个示例方法。 pipe 将少量(1024 字节)第三方响应(输入流)传输到当前请求的输出流,直到到达此输入流的末尾。
  • pipe 是内置函数吗,如果不是,如何创建自定义 pipe 函数?
  • 不,这不是构建功能。您应该将此功能添加到 Spring-Controller。
  • 任何示例,或任何参考链接,对不起,我对 Spring Boot 有点陌生。
猜你喜欢
  • 2022-01-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多