Spring HTTP缓存管理

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(不是专门用于缓存

我已经看到,您可以使用AnnotationMethodHandlerAdapter bean控制缓存http头

我的问题是,我需要在缓存上有一个精细的grane控件(在方法级别)。 最好是使用类似于“@RequestCache(expire=60)”的注释

有这样的吗? 完成这项任务的最佳方式是什么

谢谢, 安德烈

更新: pap建议使用HandlerInterceptor,但我看到多个论坛的帖子说不可能在HandlerInterceptor中获得目标方法,并建议使用常规AOP(不是专门用于缓存)。 问题是,我不想将request参数添加到所有方法中,只是为了让方面能够访问它。有什么方法可以避免这种情况吗?

一种方法(我自己用过)是创建自己的

公共类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";
}