Bonjour
J'ai un souci sur la gestion des headers HTTP pour le cache suite au passage de Spring 3.0.1 en Spring 3.0.2.
J'ai un controller (sans annotations) qui hérite de MultiActionController et dispose de plusieurs méthodes renvoyant un ModelAndView :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
public class JsonControler extends MultiActionController{
 
public ModelAndView getTheme(HttpServletRequest request, HttpServletResponse response) throws Exception {
	ModelAndView modelAndView = new ModelAndView();
	List<MeaDTO> meaList = getService().getTheme();
	modelAndView.addObject(RESPONSE,meaList);
	setCacheControl(response, getWebappConfig().getCacheControlByKey("json.getTheme"));
	return modelAndView;
}
 
protected void setCacheControl(HttpServletResponse response, final int pCacheValue) {
	if (pCacheValue != -1) {
		applyCacheSeconds(response, pCacheValue);
	}
	response.addHeader("Cache-Control", "stale-while-revalidate=" + webappConfig.getCacheStaleWhileRevalidate());
}
 
...
 
}
Dans mon fichier de configuration Spring je définis mes mapping d'url, ainsi que de la réécriture d'url via org.tuckey.web.filters.urlrewrite.UrlRewriteFilter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
<bean id="urlMapping"
	class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
	<property name="mappings">
		<props>
			<prop key="/catalog/**/*.do-json">jsonControler</prop>
                </props>
	</property>
</bean>
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
<rule match-type="regex">
	<from>^/catalog/home/theme.json$</from>
	<to>getTheme.do-json</to>
</rule>
Mon problème apparait quand je positionne les headers pour le cache via la méthode setCacheControl sur la réponse. Cette méthode appelle applyCacheSeconds du bean WebContentGenerator et ajoute un paramètre 'stale-while-revalidate' au header Cache-Control.

En Spring 3.0.1 cela fonctionne. Entête de la réponse:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Expires : Tue, 16 Aug 2011 xxxx GMT
Cache-Control:max-age=1800, stale-while-revalidate=3600
En Spring 3.0.2, je me retrouve avec une date d'expiration en double dont une avec une date en 1970, des paramètres du cache-control supplémentaires. Entête de ma réponse http:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
Expires : Tue, 16 Aug 2011 xxxx GMT, Tue, 01 Jan 1970 xxx GMT
Cache-Control:max-age=1800, stale-while-revalidate=3600, no-cache, no-store, max-age=0
Ce comportement existe encore en Spring 3.0.5.
Quelqu'un a-t-il déjà été confronté à ce problème ?
Merci d'avance