我有一个带有一个端点的简单MVC控制器,该控制器旨在返回zip文件。
@RequestMapping(value = "/xxx", method = RequestMethod.GET, produces = "application/x-download")
public String getZip(HttpServletResponse response)
InputStream is = ...;
IOUtils.copy(is, response.getOutputStream());
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, attachment; filename="myfile.zip");
return ""; // If I dont return anything (void) headers don't get changed
}
当我用Chrome击中此端点时,响应标头将缺少内容类型和内容插入!(通常,对于所有请求,我至少都有content-type = application/json"
我尝试过remvov ioutils.copy
现在,当我碰到端点时,标头正确!我确实有正确的内容类型,并且内容分配在那里。
有人可以解释我为什么会发生这种情况吗?写入输出流如何弄乱响应?在这种情况下,我要返回一个邮政编码?
在复制前设置标头。我也有一个类似的问题,并且能够以这种方式解决。
InputStream is = ...;
response.setContentType("application/x-download");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, attachment; filename="myfile.zip");
IOUtils.copy(is, response.getOutputStream());