feign 接口调用下载接口技巧

背景

服务 consumer 需要通过feign调用 provider 的下载接口。
provider 的下载内容是放在了 HttpServletResponse 中的,接口返回的是 void。

代码如下:

// provider 
@GetMapping("download")
public void download(@RequestParam("ids") List<String> ids, HttpServletResponse httpResponse){
	service.download(ids, httpResponse);
}

一般的思路是让这个接口返回 byte[] ,但我希望直接调用这个接口获取二进制流,不希望改造接口。

解决方法

利用 feign.Response类型接收原始响应数据:

Response 类型:这是 Feign 提供的一种特殊类型,用于处理原始的 HTTP 响应。使用 Response 类型可以避免 Feign 尝试解析响应体。

feign client 代码:

@GetMapping("download")
Response download(@RequestParam("ids") List<String> ids);



consumer 调用:

// 获取原始的 response
Response response = feignClient.download(ids);

// 获取流
try (InputStream inputStream = response.body().asInputStream();
     ServletOutputStream outputStream = httpResponse.getOutputStream()) {
    // 设置响应头
    httpResponse.setContentType("application/zip");
    httpResponse.setHeader("Content-Disposition", "attachment; filename=doc.zip");

    // 将响应流写入到 ServletOutputStream 中
    byte[] buffer = new byte[10240];
    int bytesRead;
    while ((bytesRead = inputStream.read(buffer)) != -1) {
        outputStream.write(buffer, 0, bytesRead);
    }
} catch (IOException e) {
    log.error(e);
    throw new CobraException(BaseResultCode.FAIL, "doc下载失败");
} finally {
    // 关闭 Feign 的响应
    response.close();
}

相关推荐

  1. feign 接口调用下载接口技巧

    2024-07-18 07:04:02       23 阅读
  2. SpringCloud-使用Feign组件调用其他微服务的接口

    2024-07-18 07:04:02       46 阅读
  3. Https接口调用问题

    2024-07-18 07:04:02       48 阅读
  4. python调用http接口

    2024-07-18 07:04:02       55 阅读
  5. shell调用http接口

    2024-07-18 07:04:02       43 阅读
  6. Linux: 调用接口

    2024-07-18 07:04:02       41 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-18 07:04:02       67 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-18 07:04:02       72 阅读
  3. 在Django里面运行非项目文件

    2024-07-18 07:04:02       58 阅读
  4. Python语言-面向对象

    2024-07-18 07:04:02       69 阅读

热门阅读

  1. 简述机器学习中常用的一些统计量

    2024-07-18 07:04:02       23 阅读
  2. VSCODE 驯服日记(二)对MPE的格式进行调整

    2024-07-18 07:04:02       21 阅读
  3. 建造者模式例题

    2024-07-18 07:04:02       20 阅读
  4. Electron 配置macOS平台的安装图标

    2024-07-18 07:04:02       22 阅读
  5. jQuery 语法

    2024-07-18 07:04:02       21 阅读
  6. 71、Flink 的 Hybrid Source 详解

    2024-07-18 07:04:02       19 阅读
  7. DLMS协议中的高级安全(HLS)身份验证

    2024-07-18 07:04:02       20 阅读
  8. C++ 士兵队列训练

    2024-07-18 07:04:02       24 阅读
  9. ffmpeg中的超时控制

    2024-07-18 07:04:02       20 阅读