该CXF文档中提到缓存为高级HTTP:
CXF JAXRS通过处理If-Match,If-Modified-Since和ETags标头,提供了对许多高级HTTP功能的支持。JAXRS Request上下文对象可用于检查前提条件。还支持Vary,CacheControl,Cookie和Set-Cookies。
我真的对使用(或至少探索)这些功能感兴趣。但是,尽管“提供支持”听起来确实很有趣,但是在实现此类功能方面并不是特别有帮助。关于如何使用If- Modified-Since,CacheControl或ETag的任何帮助或指针吗?
实际上,答案并非特定于CXF,而是纯JAX-RS:
// IPersonService.java import javax.ws.rs.GET; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.core.Context; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; @GET @Path("/person/{id}") Response getPerson(@PathParam("id") String id, @Context Request request); // PersonServiceImpl.java import javax.ws.rs.core.CacheControl; import javax.ws.rs.core.EntityTag; import javax.ws.rs.core.Request; import javax.ws.rs.core.Response; import javax.ws.rs.core.Response.ResponseBuilder; public Response getPerson(String name, Request request) { Person person = _dao.getPerson(name); if (person == null) { return Response.noContent().build(); } EntityTag eTag = new EntityTag(person.getUUID() + "-" + person.getVersion()); CacheControl cc = new CacheControl(); cc.setMaxAge(600); ResponseBuilder builder = request.evaluatePreconditions(person.getUpdated(), eTag); if (builder == null) { builder = Response.ok(person); } return builder.cacheControl(cc).lastModified(person.getUpdated()).build(); }