Caching 向Spring控制器添加标题
我知道这个问题非常类似于一个问题,但我觉得它的不同和具体足以证明它自己的问题 我刚刚从一位没有留下任何文档的唯一开发人员那里继承了一个Java web app项目。它是一款Spring MVC应用程序,其基本包结构如下:Caching 向Spring控制器添加标题,caching,spring-mvc,http-headers,Caching,Spring Mvc,Http Headers,我知道这个问题非常类似于一个问题,但我觉得它的不同和具体足以证明它自己的问题 我刚刚从一位没有留下任何文档的唯一开发人员那里继承了一个Java web app项目。它是一款Spring MVC应用程序,其基本包结构如下: com.ourOrg.app.controllers ImageController ProgramController UserController com.ourOrg.app.otherPackages 每个Controller类只是一个用@Co
com.ourOrg.app.controllers
ImageController
ProgramController
UserController
com.ourOrg.app.otherPackages
每个Controller
类只是一个用@Controller
和@RequestMapping(“/blah”)
注释的POJO。例如:
@Controller
@RequestMapping("/images")
public class ImageController() {
@RequestMapping(value="/saveImage", method = RequestMethod.POST)
@ResponseBody
public ResponseEntity<String> saveImage(@RequestParam(value="imageData", required=true) String imageXML, HttpServletRequest request){
// This method gets executed whenever the:
// http://ourSite.com/images/saveImage
// URL is hit
}
}
@控制器
@请求映射(“/images”)
公共类ImageController(){
@RequestMapping(value=“/saveImage”,method=RequestMethod.POST)
@应答器
public ResponseEntity saveImage(@RequestParam(value=“imageData”,required=true)字符串imageXML,HttpServletRequest请求){
//每当出现以下情况时,就会执行此方法:
// http://ourSite.com/images/saveImage
//URL被点击
}
}
我被要求将以下HTTP头添加到Spring配置中,以便禁用浏览器缓存:
Pragma:没有缓存
缓存控制:没有缓存
过期:-1
我在上面链接的文章听起来好像我们的控制器应该扩展这个WebContentGenerator
类。不幸的是,有几十个控制器具有大量的方法,因此重构每个控制器以扩展或继承某些基本类型并不是一个切实可行的选择(除非它是唯一的选项!)
我也看到过一些文章,它们让人觉得您必须配置Spring来使用修改响应头的AOP拦截器,但现在我真的进入了一个不熟悉的领域
考虑到SpringMVC的设置和实现,对于我来说,将这三个简单的头添加到服务器返回的每个响应(无论执行哪个控制器或方法)最简单的方法是什么
提前谢谢 希望您使用的是Spring3,您可以查看拦截器,这样您就不必修改所有的控制器(因为您说过您有很多控制器)。看起来他们可能已经实现了一个您可以直接使用的。看看波佐对这个问题的回答我知道这是一篇老文章,但也许这会对某人有所帮助。我在这个例子中使用Spring 主要是使用参数的注释:
@Controller
public class HelloController {
@RequestMapping(value = "/hello.htm")
public String hello(@RequestHeader(value="User-Agent") String userAgent)
//..
}
}
也许我弄错了,但是您不能在退出控制器之前在HttpServletResponse对象中设置这些吗?您的控制器应该可以访问该对象。如何访问?只有注释使它们成为控制器,但它们只扩展了
对象
…我认为如果你能为这一点添加一个例子,你的答案比我的更好。关于拦截机的好主意+1我不太愿意用一个例子来说明这一点,因为这实际上只是Bozho的答案,所以我宁愿人们去问这个问题并投票支持他的答案,因为他赢得了这个答案。@digitaljoel-所以我只需将这个XML添加到我的Spring配置中,Spring就会知道截取所有HTTP响应,并将它们注入这些缓存头?我是否需要做任何“AOP工作”(定义切入点等)?您不需要配置任何AOP工作。它就像一个过滤器,但在春天处理。本文可能会帮助您理解拦截器的作用Bozho回答中的xml只是配置了一个现有的拦截器,而不必创建自己的拦截器。谢谢-最后一个问题-这段代码会覆盖或附加到当前返回的头吗?换句话说,它会“吹出”当前从服务器返回的HTTP响应头吗?