首页 > 解决方案 > Okhttp 将 Response 转换为 Spring ResponseEntity

问题描述

我有一个带有 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 Response 对象转换为 Spring ResponseEntity 对象,以便我可以返回http 响应代码和消息

标签: javaspring-boothttpresponseokhttp

解决方案


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

@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);
   }
}

推荐阅读