当前位置: 首页 > 面试题库 >

如何使用CXF,JAX-RS和HTTP缓存

陶胤
2023-03-14
问题内容

该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();
}


 类似资料:
  • 我想在我的JAX-RS RESTful服务上实现OAuth2.0授权。 经过一些研究,我找到了Apache CXF来做这件事。但是,我还没有找到任何关于它的例子,对我来说也不清楚。在哪里可以找到一些使用OAuth2.0的JAX-RS示例?

  • 我将rest服务配置为通过Variant实现内容协商。在jersey上一切正常,但在apache cxf上有些问题。 找不到类ContentType:Application/XML的消息正文编写器 当我将响应构造为xml类型时,似乎找不到正确的正文编写器。

  • 我正在开发一个java脚本客户端应用程序,在服务器端我需要处理CORS,所有我用JAX-RS和Jersey编写的服务。我的代码: 感谢佛普尼

  • 但是附件总是空的。有什么建议吗?提前谢了。

  • 如何用Apache CXF实现这一点?

  • 我有一个 JAX-RS 客户端,它正在发出一个简单的 GET 请求。我正在使用CXF实现和Spring for DI。调用成功,我得到的响应代码为 200。但是我在将响应读入我的POJO时遇到错误。 例外: 代码: 在我的类路径中,我有下面这个答案中所建议的依赖项,它似乎不会自动获取。 我还尝试在创建客户端时注册json提供程序: 和 但这些选择都不起作用。当我使用上面的一个选项注册json提供程