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