как установить заголовок без кеша весной MVC 3 по аннотации - PullRequest
39 голосов
/ 06 декабря 2010

как установить заголовок без кеша в Spring MVC 3 по аннотациине является

  response.setHeader("Pragma","No-cache");     
  response.setHeader("Cache-Control","no-cache");     
  response.setDateHeader("Expires",   0);     

Ответы [ 3 ]

47 голосов
/ 06 декабря 2010

Нет такой опции. Вы можете использовать перехватчик:

<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>

(взято из здесь )

С одной стороны, логично не иметь такой аннотации. Аннотации к методам spring-mvc в первую очередь позволяют контейнеру решать, какой метод вызывать (ограничивая его заголовком запроса, URL-адресом запроса или методом). Управление ответом не попадает в эту категорию.

С другой стороны - да, будет удобно иметь их, потому что когда контроллеры проходят модульное тестирование, проверять содержимое заголовка http не имеет значения (или это так?). И есть @ResponseBody и @ResponseStatus, которые указывают некоторые свойства ответа.

19 голосов
/ 17 февраля 2011

Чтобы переопределить параметры для определенных сопоставлений контроллера, используйте объект свойств cacheMappings в WebContentInterceptor

<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>

1 голос
/ 23 июня 2014

Я знаю, что это старый, но это может быть полезно для некоторых.

Если вы хотите добавить гораздо больше логики к тому, когда вы кешируете, а когда нет, вы также можете написать собственный перехватчик.

Например, если вы хотите отключить кэширование в ответе только в том случае, если браузер работает с IE или только с определенных URL-адресов, вы также можете сделать это, расширив HandlerInterceptor интерфейс.

Делая это, вы можете в значительной степени контролировать то, что происходит.Это не так просто, как просто установить заголовок для всего сразу или просто ввести изменения в ответ на каждом контроллере, но это также не так сложно и, на мой взгляд, является лучшим долгосрочным решением.Также хорошо знать, как делать это весной.

Это довольно хороший урок для него:

http://www.mkyong.com/spring-mvc/spring-mvc-handler-interceptors-example/

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...