1
A
回答
0
为了解决这个问题,我最终定义了一个@Cache
方面。有几个需要注意的地方,我跑进:
缓存的方法需要返回一个
Response
对象(POJO的不是),这样的方面可以修改标题。如果您想使用ETags,那么包含方法(或方法参数本身)的类需要公开
@Request
,以便方面可以检查传入标记。确保您的方法参数与您的方法名称结合在一起实际上会创建唯一的键。这里的另一个问题是响应类型。客户端可以发出两个具有相同参数但响应类型不同的请求。
您可以轻松地将选项添加到该方面,以便按照每个方法控制
max-age
和其他参数。
这里是我的invoke
方法:
@Override
public Object invoke(MethodInvocation invocation) throws Throwable {
if (Response.class != invocation.getMethod().getReturnType()) {
logger.warning(String.format("%s is @Cachable but does not return a Response object", invocation.getMethod()));
return invocation.proceed();
}
Optional<Request> request = getRequest(invocation);
if (!request.isPresent()) {
logger.warning(String.format("%s is @Cachable but does not declare a public Request field named \"request\"", invocation.getMethod()));
return invocation.proceed();
}
Object response = super.invoke(invocation);
EntityTag responseTag = JaxRsUtil.getEntityTag(response);
Response.ResponseBuilder builder = request.get().evaluatePreconditions(responseTag);
if (null != builder) {
logger.finer("Found matching etag: " + responseTag);
return builder.build();
}
CacheControl cc = new CacheControl();
cc.setMaxAge(maxAge);
builder = Response.fromResponse((Response)response).tag(responseTag).cacheControl(cc);
return builder.build();
}
相关问题
- 1. 注入泽西资源
- 2. 泽西资源与多个路径
- 3. 内省泽西岛资源模型泽西岛2.x
- 4. 泽西 - 运行slected集的子资源
- 5. Sitemesh和Freemarker与泽西岛资源
- 6. 在泽西岛定义WADL资源库
- 7. 泽西岛 - 不扫描资源?
- 8. 泽西资源未解决OSGI
- 9. 泽西岛2资源需要清理
- 10. 泽西:请求资源不可用
- 11. 提供泽西州父资源的子资源链接
- 12. 泽西岛的缓存方法逻辑
- 13. 泽西岛资源接收到泽西岛客户端的重复请求
- 14. REST风格的泽西多个资源和包
- 15. 泽西重定向到一个默认的URI时,资源不存在
- 16. PrimeFaces缓存资源
- 17. 如何控制Java中资源的缓存?
- 18. 如何控制QML中HTTP资源的缓存?
- 19. Django缓存控制标题:Chrome为什么不缓存此资源?
- 20. Openshift资源限制和页面缓存
- 21. MyClass的作为@PathParam泽西资源的方法
- 22. 如何限制每个客户端的泽西配额
- 23. 添加泽西配置禁用寄存器视图控制器
- 24. 如何将依赖关系注入泽西岛的资源?
- 25. 泽西岛休息时无法访问的静态资源
- 26. 解决什么资源+方法的URI将匹配在泽西
- 27. 泽西岛JAX-RS中的异常处理/资源管理
- 28. JAX-RS与泽西2.22.2 + Tomcat 7.0.59:请求的资源不可用
- 29. 在泽西岛2的资源方法中注入主体
- 30. 错误404访问的子资源在JAX-RS新泽西
如果你能使用泽西2.0:http://jalg.net/2012/09/declarative-cache-control-with-jax- rs-2-0/ – Friso
这看起来很酷。你确定它只适用于2.0吗? – mfirry
不是,但文章是关于展示新功能,特别是新的Filter API。还没有尝试过。 – Friso