Bu, bir ResourceFilterFactory kullanarak Jersey ile kolaydır - önbellek denetimi ayarlarını yapmak için yöntemlere eklediğiniz herhangi bir özel açıklama oluşturabilirsiniz. ResourceFilterFactories, uygulama başlatıldığında her keşfedilen kaynak yöntemi için çağrılır - ResourceFilterFactory içinde, yöntemin @CacheControlHeader ek açıklamasının olup olmadığını kontrol edebilirsiniz (veya ne isterseniz onu çağırmak) - eğer değilse, sadece "no-cache" ekleyen yanıt filtresini döndürün "cevaba direktifi, aksi takdirde ek açıklamadan ayarları kullanmalıdır. İşte nasıl yapılacağı bir örnek olduğunu:
public class CacheFilterFactory implements ResourceFilterFactory {
private static final List<ResourceFilter> NO_CACHE_FILTER = Collections.<ResourceFilter>singletonList(new CacheResponseFilter("no-cache"));
@Override
public List<ResourceFilter> create(AbstractMethod am) {
CacheControlHeader cch = am.getAnnotation(CacheControlHeader.class);
if (cch == null) {
return NO_CACHE_FILTER;
} else {
return Collections.<ResourceFilter>singletonList(new CacheResponseFilter(cch.value()));
}
}
private static class CacheResponseFilter implements ResourceFilter, ContainerResponseFilter {
private final String headerValue;
CacheResponseFilter(String headerValue) {
this.headerValue = headerValue;
}
@Override
public ContainerRequestFilter getRequestFilter() {
return null;
}
@Override
public ContainerResponseFilter getResponseFilter() {
return this;
}
@Override
public ContainerResponse filter(ContainerRequest request, ContainerResponse response) {
// attache Cache Control header to each response based on the annotation value
response.getHttpHeaders().putSingle(HttpHeaders.CACHE_CONTROL, headerValue);
return response;
}
}
}
açıklama şöyle olabilir:
ResourceFilterFactory Jersey tanımına aşağıdaki init param ekleyerek başvuruda kayıtlı edilebilir
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface CacheControlHeader {
String value();
}
web.xml sunucu uygulaması: @ firması tarafından çözelti dayanarak
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>package.name.CacheFilterFactory</param-value>
</init-param>
Bu kadar güzel topladığınız için teşekkürler. Bunu kendi başıma hallettim, ama bu hak, bunu yapmak için "Doğru Yol" u mükemmel bir şekilde özetliyor. – Pete
Her biri için açıklama eklemek zorunda kalmadan, tüm yöntemler için önbellek önbelleği denetimini ayarlamanın bir yolu var mı? –
[Jersey İle Ek Açıklamaları Kullanarak Önbellek Denetimi] (http://alex.nederlof.com/blog/2013/07/28/caching-using-annotations-with-jersey/) çok daha temiz ve eksiksiz –