微服务之间使用feign无法传递HttpServletResponse的问题
当使用feign远程调用服务提供方的方法,而方法中带有HttpServletResponse参数时,会报错java.lang.IllegalStateException: getOutputStream() has already been called for this response
·
问题:
当使用feign远程调用服务提供方的方法,而方法中带有HttpServletResponse参数时,会报以下错误,导致response无法传递:
java.lang.IllegalStateException: getOutputStream() has already been called for this response
解决方法:
使用Feign原生的 feign.Response 做返回,调用方解析Response,写入自己响应流
详细代码:
服务提供方:
消费方:
fenclient:
业务调用:
feign.Response和HttpServletResponse的转换工具类:
public class ConvertUtil {
@SneakyThrows
public static void feignResp2ServletResp(Response feignResponse, HttpServletResponse response) {
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);
}
}
}
成功:
更多推荐
所有评论(0)