wake-up-neo.net

wie kann man im Frühjahr MVC 3 durch Annotation einen Header ohne Cache setzen?

wie kann man im Frühjahr MVC 3 durch Annotation Header ohne Cache setzen? nicht ist 

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

Es gibt keine solche Option. Sie können einen Interceptor verwenden:

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

(genommen von hier )

Einerseits ist es logisch, keine solchen Anmerkungen zu haben. Anmerkungen zu spring-mvc-Methoden dienen hauptsächlich dazu, den Container entscheiden zu lassen, welche Methode aufgerufen werden soll (Begrenzung durch Anforderungsheader, Anforderungs-URL oder -Methode). Die Kontrolle der Antwort fällt nicht in diese Kategorie.

Auf der anderen Seite - ja, es wäre praktisch, diese zu haben, denn wenn Controller getestet werden, ist es nicht relevant, das HTTP-Header-Zeug zu testen (oder?). Und es gibt @ResponseBody und @ResponseStatus, die einige Antworteigenschaften angeben.

46
Bozho

Um die Einstellungen für bestimmte Controller-Zuordnungen zu überschreiben, verwenden Sie das cacheMappings-Eigenschaftsobjekt auf dem 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>

19
Risadinha

Ich weiß, das ist alt, aber für manche kann das hilfreich sein.

Wenn Sie beim Zwischenspeichern viel mehr Logik hinzufügen möchten und wenn nicht, können Sie auch einen benutzerdefinierten Interceptor schreiben. 

Wenn Sie beispielsweise die Zwischenspeicherung in der Antwort nur deaktivieren möchten, wenn der Browser IE oder nur von bestimmten URLs aus ist, können Sie dies auch tun, indem Sie die Schnittstelle HandlerInterceptor erweitern. 

Auf diese Weise haben Sie viel Kontrolle darüber, was genau passiert. Es ist nicht so einfach, den Header für alles auf einmal festzulegen oder nur die Änderungen der Antwort in jedem Controller einzugeben, aber es ist auch nicht so schwer und meiner Meinung nach eine bessere langfristige Lösung. Es ist auch eine gute Sache zu wissen, wie man im Frühling allgemein vorgeht.

Dies ist ein ziemlich gutes Tutorial dafür: 

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

1
njfife