如何在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()); }