【发布时间】:2012-11-30 17:09:39
【问题描述】:
我在 Jersey 从事 Java Web 服务工作。我想了解如何处理以下问题:
显然,JAX-RS (JSR 311) 对于每个状态为 406 的情况,都说响应没有实体。例如,在第 3.7.2 节请求匹配中,确定将处理请求的方法:
至少有一种可接受的响应实体主体媒体类型是受支持的输出数据 格式(见第 3.5 节)。如果没有方法支持可接受的响应实体主体之一 媒体类型的实现必须生成一个带有 不可接受的响应(HTTP 406 状态)并且没有实体。必须按照第 3.3.4 节中的说明处理异常。
但是,RFC 2616 推荐了另一件事:
10.4.7 406 不可接受
请求标识的资源只能生成响应实体,其内容特征根据请求中发送的accept headers是不可接受的。
除非它是一个 HEAD 请求,否则响应应该包含一个实体,该实体包含一个可用实体特征和位置的列表,用户或用户代理可以从中选择最合适的一个。实体格式由 Content-Type 标头字段中给出的媒体类型指定。根据用户代理的格式和能力,可以自动选择最合适的选项。但是,该规范没有为这种自动选择定义任何标准。
Note: HTTP/1.1 servers are allowed to return responses which are not acceptable according to the accept headers sent in the request. In some cases, this may even be preferable to sending a 406 response. User agents are encouraged to inspect the headers of an incoming response to determine if it is acceptable.
那么,我应该为 Jersey 做些什么,包括一个包含 406 场景中可用实体特征列表的实体。
【问题讨论】:
标签: java http-headers jersey jax-rs rfc