Spring MVC:headers 添加到未返回的 RestController 中

Spring MVC: headers added in a RestController not returned

我有一个简单的 Spring MVC RestController

@RestController
@RequestMapping(value = "/xxx")
public class MyResource {

其中一个端点是 return 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();
  }

以上是为了 return 一个 ZIP 并添加两个额外的 header 以便浏览器知道它是触发下载的东西。

但事实并非如此,当我使用 chrome 网络工具检查响应 header 时, header 与请求到达端点之前完全相同。 content-type 仍然是 application/json 而 content-disposition 甚至不存在。

我有一个名为 "app-version" 的自定义 header。我做了一个测试,尝试修改这个值,看看它是否真的被改变了

response.setHeader("app-version","hello");

但是不,当我检查响应 header 时,"app-version" 仍然是调用之前的状态。

我是否必须启用任何东西才能在我的控制器中修改 header?

尝试将 return 类型从 void 更改为 String

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

我认为如果端点 return 没有任何内容,spring 将不会在 header 中应用任何更改。