Spring HTTP缓存管理
我已经看到,您可以使用AnnotationMethodHandlerAdapter bean控制缓存http头 我的问题是,我需要在缓存上有一个精细的grane控件(在方法级别)。 最好是使用类似于“@RequestCache(expire=60)”的注释 有这样的吗? 完成这项任务的最佳方式是什么 谢谢, 安德烈 更新: pap建议使用HandlerInterceptor,但我看到多个论坛的帖子说不可能在HandlerInterceptor中获得目标方法,并建议使用常规AOP(不是专门用于缓存)。 问题是,我不想将request参数添加到所有方法中,只是为了让方面能够访问它。有什么方法可以避免这种情况吗?一种方法(我自己用过)是创建自己的Spring HTTP缓存管理,spring,spring-mvc,browser-cache,cache-control,Spring,Spring Mvc,Browser Cache,Cache Control,我已经看到,您可以使用AnnotationMethodHandlerAdapter bean控制缓存http头 我的问题是,我需要在缓存上有一个精细的grane控件(在方法级别)。 最好是使用类似于“@RequestCache(expire=60)”的注释 有这样的吗? 完成这项任务的最佳方式是什么 谢谢, 安德烈 更新: pap建议使用HandlerInterceptor,但我看到多个论坛的帖子说不可能在HandlerInterceptor中获得目标方法,并建议使用常规AOP(不是专门用于缓存
公共类CacheInterceptor实现HandlerInterceptor{
@凌驾
公共布尔预处理(HttpServletRequest,
HttpServletResponse,对象处理程序)引发异常{
类o=AopUtils.getTargetClass(处理程序);
if(o.isAnnotationPresent(RequestCache.class)){
setDateHeader(“Expires”,o.getAnnotation(RequestCache.class).expire());
}
返回true;
}
...
}
然后
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<array>
<bean class="bla.bla.CacheInterceptor " />
</array>
</property>
</bean>
您可以使用中描述的以下方法 支持“Last Modified”响应头以方便内容缓存
很好的解决方案,但是,如果我理解的话,使用AopUtils可以得到目标类(控制器),但不能得到目标方法。有没有办法在方法级别检查注释?不容易。我也想做同样的事情,但不容易做到。最后,我对整个类进行了注释(当需要不同的缓存策略时,还对控制器进行了拆分)。这对结合@ResponseBody返回图像也有效吗?
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<array>
<bean class="bla.bla.CacheInterceptor " />
</array>
</property>
</bean>
@RequestMapping(value = "/modified")
@ResponseBody
public String getLastModified(WebRequest request) {
if (request.checkNotModified(lastModified.getTime())) {
logger.error("Was not modified.");
return null;
}
logger.error("Was modified.");
//processing
return "viewName";
}