春季HTTP缓存管理
我看到你可以用AnnotationMethodHandlerAdapter bean控制缓存http头。春季HTTP缓存管理
我的问题是,我需要对缓存(在方法级别)有一个罚款grane控制。 最好的想法是像“@RequestCache(expire = 60)”这样的注释。
有没有这样的事情? 完成此任务的最佳方式是什么?
感谢, 安德烈
更新: PAP建议使用的HandlerInterceptor,但我已经看到多个论坛上的帖子说这是不可能得到的HandlerInterceptor内目标的方法和建议使用正规AOP而不是专门用于缓存。 问题是我不想将请求参数添加到我的所有方法中,只是为了使其可以访问该方面。有没有办法避免这种情况?
您可以使用 Spring mvc reference manual
支持中描述的以下方法为 '的Last-Modified' 响应头,以方便内容缓存
@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";
}
单程(我用我自己)是创建自己的HandlerInterceptor
。
public class CacheInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
Class<?> o = AopUtils.getTargetClass(handler);
if (o.isAnnotationPresent(RequestCache.class)) {
response.setDateHeader("Expires", o.getAnnotation(RequestCache.class).expire());
}
return true;
}
...
}
然后
<bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping">
<property name="interceptors">
<array>
<bean class="bla.bla.CacheInterceptor " />
</array>
</property>
</bean>
好的解决方案,但是,如果我明白,与AopUtils你可以得到目标类(控制器),但不是目标方法。有没有办法在方法级别检查注解? – 2012-03-02 10:41:16
不容易。我想做同样的事情,但不容易获得。我最终注释了整个班级(并在需要不同的缓存策略时拆分控制器)。 – pap 2012-03-02 12:20:38
这是否也适用于与@ResponseBody一起返回图像? – yglodt 2016-12-08 21:07:02