Подтвердить что ты не робот

Как установить заголовок без кеша в spring mvc 3 по аннотации

как установить заголовок без кеша в spring mvc 3 по аннотации? не

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

Ответ 1

Такого варианта нет. Вы можете использовать перехватчик:

<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, которые задают некоторые свойства ответа.

Ответ 2

Чтобы переопределить настройки для определенных сопоставлений контроллера, используйте объект свойств 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>

Ответ 3

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

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

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

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

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

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