如何通过注释在spring mvc 3中设置header no cache

Edw*_*Lau 39 java spring spring-mvc java-ee

如何通过注释在spring mvc 3中设置header no cache?不是

  response.setHeader("Pragma","No-cache");     
  response.setHeader("Cache-Control","no-cache");     
  response.setDateHeader("Expires",   0);     
Run Code Online (Sandbox Code Playgroud)

Boz*_*zho 47

没有这样的选择.你可以使用一个拦截器:

<mvc:annotation-driven/>
<mvc:interceptors>
    <bean id="webContentInterceptor" 
          class="org.springframework.web.servlet.mvc.WebContentInterceptor">
        <property name="cacheSeconds" value="0"/>
        <property name="useExpiresHeader" value="true"/>
        <property name="useCacheControlHeader" value="true"/>
        <property name="useCacheControlNoStore" value="true"/>
    </bean>
</mvc:interceptors>
Run Code Online (Sandbox Code Playgroud)

(取自这里)

一方面,没有这样的注释是合乎逻辑的.spring-mvc方法的注释主要是让容器决定调用哪个方法(通过请求标头,请求网址或方法来限制它).控制响应不属于此类别.

另一方面 - 是的,拥有它们会很方便,因为当控制器经过单元测试时,它与测试http头部的东西无关(或者它是什么?).这里面有@ResponseBody@ResponseStatus,这确实指定了一些反应特性.

  • 和`@ ResponseStatus` :) (2认同)
  • 没错.好吧,也许我的推理并不完全正确:) (2认同)

Ris*_*nha 19

要覆盖某些控制器映射的设置,请使用WebContentInterceptor上的cacheMappings属性对象

<bean id="webContentInterceptor"
class="org.springframework.web.servlet.mvc.WebContentInterceptor">
<property name="cacheSeconds" value="2100" />
<property name="useExpiresHeader" value="true" />
<property name="useCacheControlHeader" value="true" />
<property name="useCacheControlNoStore" value="true" />
<property name="cacheMappings">
    <props>
        <prop key="/myUncachedController">0</prop>
    </props>
</property>
Run Code Online (Sandbox Code Playgroud)