如何使用 Feign Client 下载 pdf 文件?

abh*_*han 5 spring-cloud spring-cloud-feign

在我们的项目中,我们使用 feign client 调用第三方服务。对于内容类型 application/json,它工作正常。但是我们有一个要求,第三方服务 URL 返回 pdf 文件,而那个时候我们遇到了异常。

由于安全原因,我无法粘贴日志和代码,但是如果有人与我分享从 feign 客户端下载 pdf 文件的代码,那将对我非常有帮助。

提前致谢!!

小智 4

您可以用作byte[]返回类型。

@FeignClient(url = "url", name = "name")
public interface SomeFeignClient {

    @GetMapping("/give-me-a-pdf")
    byte[] getPDF();
}
Run Code Online (Sandbox Code Playgroud)

您的服务只需调用

public byte[] getPDF() {
   return SomeFeignClient.getPDF();
}
Run Code Online (Sandbox Code Playgroud)

现在,使用字节数组,您可以执行任何您想要的操作,例如使用保存文件

FileUtils.writeByteArrayToFile(new File("pathname"), resource);
Run Code Online (Sandbox Code Playgroud)

或提供一个端点来下载文件(Spring boot 可以返回几乎任何内容,而无需使用任何外部库)

@GetMapping("/pdf")
ResponseEntity getPDF() {

    byte[] resource = SomeFeignClient.getPDF();

    return ResponseEntity.ok()
            .contentLength(resource.length)
            .contentType(MediaType.APPLICATION_PDF)
            .body(resource);
}
Run Code Online (Sandbox Code Playgroud)

  • 我想知道是否存在流模式而不是检索所有字节?因为这可能会导致大 pdf 文件的内存问题,特别是当该控制器处于压力模式时...... (2认同)