47.2.3. 注入 HTTP 邮件标头中的数据
概述
在正常情况下,在请求消息中传递 HTTP 标头会传递消息的通用信息,如何在传输中处理它,以及有关预期响应的详情。虽然几种标准标头通常被识别和使用,但 HTTP 规范允许任何 name/value 对用作 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
标头的值注入类 最旧的Date
字段的代码。
注入 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” 显示将 handle
cookie 的值注入到 CB
类中的字段的代码。
例 47.6. 注入 cookie
import javax.ws.rs.CookieParam; ... class CB { ... @CookieParam("handle") String handle; ... }
错误处理
如果尝试使用 HTTP 消息注入注解注入数据时出现一个错误,则生成 WebApplicationException 异常嵌套原始异常。WebApplicationException 异常的状态设置为 400
。