47.2.3. 从 HTTP 邮件标头中注入数据
概述
在普通中使用请求消息中的 HTTP 标头会传递有关消息的一般信息,如何传输中处理它,以及预期响应的详细信息。虽然通常会识别和使用几个标准标头,但 HTTP 规范允许将任何名称/值对用作 HTTP 标头。JAX-RS API 提供了将 HTTP 标头信息注入资源实施的简单机制。
最常用的 HTTP 标头之一是 Cookie。Cookie 允许 HTTP 客户端和服务器在多个请求/响应序列之间共享静态信息。JAX-RS API 提供注释,将数据直接从 Cookie 注入资源实施。
从 HTTP 标头注入信息
javax.ws.rs.HeaderParam
注解用于将 HTTP 标头字段中的数据注入参数、字段或 bean 属性。它有一个参数,用于指定从中提取值并注入到资源实施中的 HTTP 标头字段的名称。关联的参数、字段或 bean 属性必须符合 “支持的数据类型”一节 中描述的数据类型。
注入 If-Modified-Since 标头 显示将 HTTP If-Modified-Since
标头注入类 最旧的
字段的代码。
注入 If-Modified-Since 标头
import javax.ws.rs.HeaderParam; ... class RecordKeeper { ... @HeaderParam("If-Modified-Since") String oldestDate; ... }
从 Cookie 注入信息
Cookie 是特殊的 HTTP 标头类型。它们由一个或多个在第一个请求上传递给资源实施的名称/值对组成。在第一个请求后,cookie 会在提供程序和消费者之间返回并传给每条消息。只有消费者来生成请求,因此可以更改 Cookie。Cookie 通常用于跨多个请求/响应序列、存储用户设置和其他可保留的数据进行维护。
javax.ws.rs.CookieParam
注解从 Cookie 的字段中提取值并将其注入资源实施。它取一个参数,用于指定要从中提取值的 cookie 的字段名称。除了 “支持的数据类型”一节 中列出的数据类型外,带有 @CookieParam
的实体也可以是一个 Cookie
对象。
例 47.6 “注入 Cookie” 显示将 句柄
Cookie 值注入 CB
类中的字段的代码。
例 47.6. 注入 Cookie
import javax.ws.rs.CookieParam; ... class CB { ... @CookieParam("handle") String handle; ... }
错误处理
如果在尝试使用 HTTP 消息注入注解 WebApplicationException 异常被嵌套原始异常时,会发生错误。WebApplicationException 异常的状态设置为 400
。