Spring MVC:在RestController中添加的标头未返回

时间:2016-06-15 09:34:16

标签: spring-mvc controller header amend

我有一个简单的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”仍然是电话会议之前的内容。

我是否必须启用任何内容才能修改控制器内的标头?

1 个答案:

答案 0 :(得分:0)

尝试将返回类型从void更改为String

public String downloadZip(HttpServletResponse response) {
        ...
        return ""        
  }

如果端点没有返回任何内容,我认为spring不会在标头中应用任何更改。