java - Okhttp 将 Response 转换为 Spring ResponseEntity

标签 java spring-boot httpresponse okhttp

我有一个带有 POST REST api 的 Springboot 2.2 Web 服务。 我正在使用 Okhttp 客户端向第三方服务发出请求。 我想将第三方服务的准确响应返回给我的网络服务的调用者。 所有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 响应代码和消息

最佳答案

在这种情况下,您可以直接使用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);
   }
}

关于java - Okhttp 将 Response 转换为 Spring ResponseEntity,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60771850/

相关文章:

java - 在 Java 中将不可变实例分配给 Collection 的最佳方法

java - 如何删除框架布局/视频 View 中的自动对焦

java - 为电子邮件实现 Spring Boot 服务

javascript - JQuery/thymeleaf : overwriting submit action

http - 指定发送时支持的媒体类型 "415 unsupported media type"

c# - .NET:发送带数据的 POST 和读取响应的最简单方法

java - Java中处理渲染异常?

java - 如何为 RibbonApplicationMenu 添加图标?

java - 添加到 Activemq 队列时如何识别重复消息

azure - 文件开始流式传输到浏览器后,如何清理 Azure 本地存储中的文件和目录?