java - 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 响应代码和消息
解决方案
在这种情况下,您可以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);
}
}
推荐阅读
- function - react native 摆脱商店中不必要的方法
- php - 调用未定义的方法 PDO::fetchAll()
- batch-file - 来自单个 ECHO 命令的连接文本文件输出将字符插入到预期输出后第二次打印的字符串中
- spring-boot - 为什么 Sleuth 在我的 Spring Boot 服务中不能与 Log4j2 一起使用
- html - 正确重复倾斜模式的 HTML 或 CSS 代码
- git - 找不到用于创建和编辑 git repo 文件的目录
- docker - Docker 修剪容器在过去 X 小时内未使用
- javascript - 关闭窗口时删除本地存储Angular 2
- python - 如何更改 ipython 内核的 PYTHONPATH?
- flutter - SingleChildScrollView 内的全高容器