【问题标题】:How to implement a download file using feign client如何使用feign客户端实现下载文件
【发布时间】:2018-11-02 10:58:18
【问题描述】:

我有一个下载文件的网址。 url 的签名是http://services.local/api/v1/downloadFile?messageId=11090.I 想要使用 feign 客户端代理它。每次我得到一个异常告诉我的输出流已关闭。

2018 年 11 月 2 日星期五 16:18:47 IST 出现意外错误(类型=内部服务器错误,状态=500)。 无法写入 JSON:已为此响应调用 getOutputStream();嵌套异常是 com.fasterxml.jackson.databind.JsonMappingException:getOutputStream() 已经为此响应调用(通过参考链:org.springframework.security.web.firewall.FirewalledResponse["response"]->org.springframework. security.web.header.HeaderWriterFilter$HeaderWriterResponse["response"]->org.springframework.security.web.context.HttpSessionSecurityContextRepository$SaveToSessionResponseWrapper["response"]->org.springframework.security.web.firewall.FirewalledResponse["response "]->org.apache.catalina.connector.ResponseFacade["writer"])

我的feign客户端很简单

 @FeignClient(name = "downloadAPI", url = "${service.ip}")
public interface DownloadApiProxy {

    @RequestMapping(method = RequestMethod.GET, value = "/downloadFile")
    public void downloadFile(HttpServletResponse response,
            @RequestParam(value = "downloadMessageId", required = false) String messageId);

【问题讨论】:

    标签: java spring spring-cloud spring-cloud-feign


    【解决方案1】:

    我遇到了同样的问题,我想从一个微服务向另一个微服务进行 API 调用,所以我映射了返回 byte[] 的那个 API。

    所以你的代码应该是这样的:

    @FeignClient(name = "downloadAPI", url = "${service.ip}")
    public interface DownloadApiProxy {
    
        @RequestMapping(method = RequestMethod.GET, value = "/downloadFile")
        public byte[] downloadFile(HttpServletResponse response, @RequestParam(value = "messageId", required = false) String messageId);
    
         :
         :
    }
    

    它将在byte[]返回下载的文件。

    注意:您的查询参数将是messageId 作为给出的示例。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-04-30
      • 2023-03-22
      • 1970-01-01
      • 2023-01-29
      • 2019-08-16
      • 1970-01-01
      • 1970-01-01
      • 2018-06-01
      相关资源
      最近更新 更多