如何使用伪装客户端实现下载文件

时间:2018-11-02 10:58:18

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

我有一个下载文件的URL。网址的签名是http://services.local/api/v1/downloadFile?messageId=11090.I要使用伪装客户端进行代理。每次我收到一个异常通知我输出流已关闭时。

  

周五Nov 02 16:18:47 IST 2018   发生意外错误(类型=内部服务器错误,状态= 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“])

我的假装客户很简单

 @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);

1 个答案:

答案 0 :(得分:0)

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

因此您的代码应类似于:

@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