Dans un contrôleur Spring MVC basé sur des annotations, quelle est la meilleure façon de définir les en-têtes de cache pour un chemin spécifique ?
Réponses
Trop de publicités?Vous pouvez définir une anotation pour cela : @CacheControl(isPublic = true, maxAge = 300, sMaxAge = 300)
puis rendre cette anotation dans l'en-tête HTTP avec l'intercepteur de Spring MVC. ou le faire de manière dynamique :
int age = calculateLeftTiming();
String cacheControlValue = CacheControlHeader.newBuilder()
.setCacheType(CacheType.PUBLIC)
.setMaxAge(age)
.setsMaxAge(age).build().stringValue();
if (StringUtils.isNotBlank(cacheControlValue)) {
response.addHeader("Cache-Control", cacheControlValue);
}
L'implication peut être trouvée ici : Mode constructeur élégant
BTW : Je viens de découvrir que Spring MVC a un support intégré pour le contrôle du cache : Google WebContentInterceptor ou CacheControlHandlerInterceptor ou CacheControl, vous le trouverez.
J'ai trouvé WebContentInterceptor
pour être le moyen le plus simple d'y arriver.
@Override
public void addInterceptors(InterceptorRegistry registry)
{
WebContentInterceptor interceptor = new WebContentInterceptor();
interceptor.addCacheMapping(CacheControl.noCache(), "/users", "admin");
registry.addInterceptor(interceptor);
}
Je sais que c'est une vieille histoire, mais pour ceux qui font des recherches sur Internet, cela pourrait les aider :
@Override
protected void addInterceptors(InterceptorRegistry registry) {
WebContentInterceptor interceptor = new WebContentInterceptor();
Properties mappings = new Properties();
mappings.put("/", "2592000");
mappings.put("/admin", "-1");
interceptor.setCacheMappings(mappings);
registry.addInterceptor(interceptor);
}
0 votes
Pour les nouveaux utilisateurs, c'est probablement la réponse que vous cherchez