我有一个简单的Spring MVC RestController
@RestController
@RequestMapping(value = "/xxx")
public class MyResource {
其中一个端点是要返回一个ZIP文件,所以我有这个:
@RequestMapping(value = "/xxx", method = RequestMethod.GET)
public void downloadZip(HttpServletResponse response) {
InputStream is = ...
IOUtils.copy(is, response.getOutputStream());
response.setContentType("application/zip");
response.setHeader(HttpHeaders.CONTENT_DISPOSITION, attachment; filename=myfile.zip);
response.flushBuffer();
}
上面的意思是返回一个ZIP并为浏览器添加两个额外的标题,以便知道触发下载的内容。
但事实并非如此,当我使用chrome网络工具检查Response标头时,标头与请求到达端点之前的标头完全相同。 内容类型仍然是application / json,内容配置甚至不存在。
我有一个名为“app-version”的自定义标题。我做了一个测试,尝试修改该值,看看它是否真的被改变了
response.setHeader("app-version","hello");
但不,当我检查响应标头时,“app-version”仍然是电话会议之前的内容。
我是否必须启用任何内容才能修改控制器内的标头?
答案 0 :(得分:0)
尝试将返回类型从void更改为String
public String downloadZip(HttpServletResponse response) {
...
return ""
}
如果端点没有返回任何内容,我认为spring不会在标头中应用任何更改。