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

2024-01-20

The CXF http://cxf.apache.org/文档提到缓存为高级HTTP http://cxf.apache.org/docs/jax-rs.html#JAX-RS-AdvancedHTTP:

CXF JAXRS 通过处理 If-Match、If-Modified-Since 和 ETags 标头来支持许多高级 HTTP 功能。 JAXRS 请求上下文对象可用于检查先决条件。还支持 Vary、CacheControl、Cookies 和 Set-Cookies。

我真的对使用(或至少探索)这些功能很感兴趣。然而,虽然“提供支持”听起来确实很有趣,但它对于实现这些功能并不是特别有帮助。有关如何使用 If-Modified-Since、CacheControl 或 ETags 的任何帮助或指示吗?


实际上,答案并不特定于 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();
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 CXF、JAX-RS 和 HTTP 缓存 的相关文章

  • java程序有多少种结束方式?

    我知道使用 System exit 0 可以结束一个java程序 例如 如果我有一个JFrame窗口 它会关闭并结束程序 但我想知道还有多少其他方法 可以关闭它并结束程序 包括发生错误时 程序会被关闭 JFrame也会被关闭吗 添加到其他答
  • 非易失性领域的出版与阅读

    public class Factory private Singleton instance public Singleton getInstance Singleton res instance if res null synchron
  • 如何在 Android 应用程序中隐藏 Flutterwave API 密钥

    我正在构建一个 Android 应用程序 目前正在将 Flutterwave 集成到我的应用程序中以进行支付 建议我永远不要将 Flutterwave API 密钥放在我的应用程序上 那么我该如何隐藏这些键呢 我正在使用 Retrofit
  • Java LostFocus 和 InputVerifier,按反向制表符顺序移动

    我有一个 GUI 应用程序 它使用 InputVerifier 在产生焦点之前检查文本字段的内容 这都是很正常的 然而 昨天发现了一个问题 这似乎是一个错误 但我在任何地方都找不到任何提及它的地方 在我将其报告为错误之前 我想我应该问 我在
  • 无法使用 datastax java 驱动程序通过 UDT 密钥从 cassandra 检索

    我正在尝试使用用户定义的类型作为分区键将对象存储在 cassandra 中 我正在使用 datastax java 驱动程序进行对象映射 虽然我能够插入到数据库中 但无法检索该对象 如果我更改分区键以使用非 udt 例如文本 我就能够保存和
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • 使用 OkHttp 下载损坏的文件

    我编写的下载文件的方法总是会产生损坏的文件 public static String okDownloadToFileSync final String link final String fileName final boolean te
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 将类转换为 JSONObject

    我有好几堂这样的课 我想将类转换为 JSONObject 格式 import java io Serializable import com google gson annotations SerializedName public cla
  • ThreeTen 向后移植与 JSR-310 的比较

    由于某些原因 我们现在无法使用 java 8 我们仍然停留在 java 7 上 不过 我想使用新的JSR 310 date time APIs现在 使用官方向后移植 ThreeTen http www threeten org threet
  • 在光标所在行强制关闭!

    嘿 我正在尝试创建一个应用程序来查找存储在 SQlite 数据库中的 GPS 数据 但我面临一个问题 我构建了一个 DbAdapter 类来创建数据库 现在我尝试使用以下函数从另一个类获取所有数据上的光标 public Cursor fet
  • 为什么在将 String 与 null 进行比较时会出现 NullPointerException?

    我的代码在以下行中出现空指针异常 if stringVariable equals null 在此语句之前 我声明了 stringVariable 并将其设置为数据库字段 在这个声明中 我试图检测该字段是否有null值 但不幸的是它坏了 有
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • 从三点求圆心的算法是什么?

    我在圆的圆周上有三个点 pt A A x A y pt B B x B y pt C C x C y 如何计算圆心 在Processing Java 中实现它 我找到了答案并实施了一个可行的解决方案 pt circleCenter pt A
  • Tomcat 6 未从 WEB-INF/lib 加载 jar

    我正在尝试找出我的 tomcat 环境中的配置问题 我们的生产服务器正在运行 tomcat 安装并从共享 NFS 挂载读取战争 然而 当我尝试使用独立的盒子 及其配置 进行同样的战争时 我收到下面发布的错误 有趣的是 如果我将 WEB IN
  • 文本视图不显示全文

    我正在使用 TableLayout 和 TableRow 创建一个简单的布局 其中包含两个 TextView 这是代码的一部分
  • Android计算两个日期之间的天数

    我编写了以下代码来查找两个日期之间的天数 startDateValue new Date startDate endDateValue new Date endDate long diff endDateValue getTime star
  • Spring Data Rest 多对多 POST

    首先 让我解释一下我的用例 这非常简单 有一个用户实体和一个服务实体 我使用 UserService 作为连接实体 连接表 在用户和服务之间建立多对多关联最初 会有一些用户集和一些服务集 用户可以在任何时间点订阅任何服务 在这种情况下 将向
  • 什么是 Java2D 处理程序线程?

    我创建了一个使用 Hibernate 的示例 java 应用程序 当我进行线程转储时 我观察到一个名为 Java2D Disposer 的奇怪线程 有人能告诉我该线程的功能吗 AWT 系统中的某些实体需要最终确定以释放资源 最突出的例子是j
  • 在会话即将到期之前调用方法

    我的网络应用程序有登录的用户 有一个超时 在会话过期之前 我想执行一个方法来清理一些锁 我已经实现了sessionListener但一旦我到达public void sessionDestroyed HttpSessionEvent eve

随机推荐

  • 如何从 java fx 应用程序打开默认系统浏览器?

    我正在尝试从 javafx 在默认系统浏览器中打开一个 web url 我没有找到任何关于此的官方文档 有什么线索吗 编辑 我发现了教程 http blog ngopal com np 2011 02 09 open default bro
  • MySQL DROP 所有表,忽略外键

    有没有一种简单的方法可以从 MySQL 数据库中删除所有表 忽略其中可能存在的任何外键约束 我发现生成的 drop 语句集很有用 并建议进行以下调整 将生成的 drop 限制到您的数据库 如下所示 SELECT concat DROP TA
  • SQL:标记哪个 WHERE 条件匹配

    这是一个理论问题 我想知道是否有一个好的方法来找出 WHERE 语句中的哪个条件匹配 假设我有一个这样的查询 SELECT FROM table WHERE COND1 OR COND2 AND COND3 OR COND4 有什么方法可以
  • pytest:如何创建专用测试目录

    我想要以下项目结构 folder tests project 我们来写一个简单的例子 test pytest tests test sum py t pytest sum py init py 总和 py def my sum a b re
  • JComboBox设置标签和值

    是否可以为a设置一个值和一个标签JComboBox所以我可以显示标签但获得不同的值 例如在 JavaScript 中我可以这样做 document getElementById myselect options 0 value access
  • 添加头文件的 CMake 构建错误 - 致命错误:找不到文件

    我在 Ubuntu 14 04 中使用 CMake 构建 C 源文件 我有一个主要源文件 这包括一个头文件 其中包含另一个源文件中的函数 我的主要源文件是 DisplayImage cpp 头文件是 Camera h 其中包含源文件 Cam
  • Javascript 在分配给其他变量时丢失上下文

    为什么在 javascript 中 如果您将对象方法引用到某个变量 它会丢失该对象上下文 找不到任何链接来解释幕后发生的事情 除了这一篇指出 this 指的是 拥有 该方法的对象 http www sitepoint com what is
  • 在 Android App Bundle 中添加 SwitchCompat 后,找不到资源错误 res/drawable/abc_switch_thumb_material.xml

    我知道这个问题已经被问过好几次了 我已经阅读了所有这些问题 并匹配了所有依赖项 以便它们具有相同的版本 但是这个错误只有在添加 Switch Compat 之后才开始发生 因为您还可以通过查看 Fabric 的崩溃报告来看到这一点 此错误并
  • 尝试启动我的应用程序时出现“没有适当的协议错误”

    我已经使用带有 SSL 证书的 nginx 代理在临时环境和生产环境中成功运行了一个 Spring Boot Web 应用程序几个月了 突然间 昨晚当应用程序尝试发送邮件消息时 当我尝试连接到邮件服务器时 我开始在生产服务器中看到错误 在尝
  • Google Sites API + OAuth2(在 Appengine 上)

    我一直在尝试利用 Python 库来访问 Google Sites API 第一步需要用户授权我们的应用程序 他们建议使用 OAuth2 并且他们提供了一个可以找到的库here http code google com p google a
  • 将桌子分成两半

    无论如何 是否可以使用 CSS 将表格分成两半并并排显示两个部分 例如 采取这个 row1 row1 row1 row2 row2 row2 row3 row3 row3 row4 row4 row4 row5 row5 row5 并做这个
  • 什么是纯 Java [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我受邀参加 Pure Java Developer 面试 请帮助我理解什么是纯Java 找不到任何有关它的信息 纯Java代码是这样的代码 符合
  • 在 Haskell 中基于新类型(“包装类型”)构建函数的惯用方法是什么?

    Let StringWrapper1 and StringWrapper2是包裹字符串的两种类型 即newtype StringWrapper1 StringWrapper1 String and newtype StringWrapper
  • 导入错误:没有名为 6 的模块

    我正在尝试构建 OpenERP 项目 并完成依赖项 现在出现这个错误 Traceback most recent call last File openerp client py line 105 in
  • 理解 PyTorch 中使用backward()的梯度计算

    我试图了解基本的 pytorch autograd 系统 x torch tensor 10 requires grad True print tensor x x backward print gradient x grad output
  • 使用 javascript/jquery 查找链接目标是否为图像

    我正在尝试编写一个脚本来找到所有 a 目标是 jpg gif 或 png 的标签 并向它们附加一个函数 a filter function return this href match probably some regex here bi
  • 如何根据姓名和 ID 计算 C 列中的“否”?

    我有 3 列 A B C Name ID Report 在 A 列中我有名字 可以重复 在 B 列中 我有 ID 可以为不同的名称重复使用相同的 ID 在 C 列中 我有 是 和 否 可以对同一 ID 重复使用 否 我需要帮助来计算 Joh
  • 在 Android 寻呼机中隐藏应用程序标题栏

    Can anyone tell how to hide the app title bar in Pager fragment 这应该足够了 ActionBar bar getActionBar you might need to use
  • git中的暂存区有什么用

    我对 git 很陌生 我刚刚了解了工作目录和暂存区域的概念 我不太清楚暂存区的用途 如果暂存区域不存在并且我们可以直接从工作目录提交到本地存储库 可能会出现什么问题 抱歉 如果我的问题很愚蠢 谢谢并致以问候 京东 你的问题一点也不傻 它是构
  • 如何使用 CXF、JAX-RS 和 HTTP 缓存

    The CXF http cxf apache org 文档提到缓存为高级HTTP http cxf apache org docs jax rs html JAX RS AdvancedHTTP CXF JAXRS 通过处理 If Mat