背景
不同模块之间,如果需要远程调用下载表格的接口,需要使用reponse来将表格流进行远程传递,但是如果直接使用HttpServletResponse作为参数传递的话,会报类型转换异常或者其他异常情况,导致reponse无法传递。
解决办法
使用Feign原生的 feign.Response 做返回,调用方解析Response,写入自己响应流
1.fegin包中的Reponse:
详细流程
1.被调用方代码
2.Fegin调用
3.调用方代码
重点需要一个将Fegin的Reponse转换为普通HttpServletResponse的方法,在这里是 feignResp2ServletResp(workBook, response) 方法
代码如下:
/**
* Fegin的Response转换为Servlet的Response
*
* @param feignResponse feignResponse
* @param response response
* @throws IOException IOException
*/
public static void feignResp2ServletResp(Response feignResponse, HttpServletResponse response) throws IOException {
Response.Body body = feignResponse.body();
try (InputStream inputStream = body.asInputStream(); OutputStream outputStream = response.getOutputStream()) {
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, feignResponse.headers().get(HttpHeaders.CONTENT_DISPOSITION).stream().findFirst().get());
response.setContentType(feignResponse.headers().get(HttpHeaders.CONTENT_TYPE).stream().findFirst().get());
IOUtils.copy(inputStream, outputStream);
}
}
方法内引入的包都是java原生的或者Fegin的包。
参考链接:添加链接描述
– 完结 –