如何在spring mvc中设置响应头

我有一个方法,我想设置响应头缓存控制和编译指示: –

public String addUser(@Valid User user, BindingResult bindingResult) { if(bindingResult.hasErrors()) { bindingResult.getFieldError(); return"edit"; } return "redirect:/welcome/profile/"+user.getName(); } 

在这个方法中,我想像使用HttpservletResponse调用setHeader方法一样在简单的servlet代码中设置cache-control和pragma: –

 response.setHeader("Cache-Control","no-cache,no-store,must-revalidate"); response.setHeader("Pragma","no-cache"); response.setDateHeader("Expires", 0); 

我搜索了spring的文档,找不到任何直接的方法,但我发现了这个: –

 @RequestMapping("/something") public ResponseEntity handle(HttpEntity requestEntity) throws UnsupportedEncodingException { String requestHeader = requestEntity.getHeaders().getFirst("MyRequestHeader")); byte[] requestBody = requestEntity.getBody(); HttpHeaders responseHeaders = new HttpHeaders(); responseHeaders.set("MyResponseHeader", "MyValue"); return new ResponseEntity("Hello World", responseHeaders, HttpStatus.CREATED); } 

但我不知道如何使用它

如果要为控制器的每个响应设置标头,可以使用@ModelAttribute注释。

 @ModelAttribute public void setVaryResponseHeader(HttpServletResponse response) { response.setHeader("Vary", "Accept"); } 
  public String addUser(@Valid User user, BindingResult bindingResult,HttpServletRequest request,HttpServletResponse response) { if(bindingResult.hasErrors()) { bindingResult.getFieldError(); return"edit"; } response.setHeader("Cache-Control","no-cache,no-store,must-revalidate"); response.setHeader("Pragma","no-cache"); response.setDateHeader("Expires", 0); return "redirect:/welcome/profile/"+user.getName(); } 

从Spring v.4.1开始:

 @RequestMapping("/something") public ResponseEntity handle() { return ResponseEntity.status(HttpStatus.CREATED) .header("header", "value") .body(new MyClass()); }