我正在使用 Jersey 从事 Java Web 服务。我想了解如何处理以下问题:
显然,JAX-RS (JSR 311)对于每个状态为 406 的情况,都说响应没有实体。例如,在 3.7.2 请求匹配部分中,标识将处理请求的方法:
至少有一种可接受的响应实体主体媒体类型是受支持的输出数据格式(参见第 3.5 节)。如果没有方法支持可接受的响应实体主体媒体类型之一,则实现必须生成带有不可接受的响应(HTTP 406 状态)且没有实体的 WebApplicationException。必须按照 3.3.4 节中的描述处理异常。
然而,RFC 2616 推荐了另一件事:
10.4.7 406 不可接受
请求标识的资源只能根据请求中发送的接受头生成具有不可接受的内容特征的响应实体。
除非它是一个 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 场景中可用实体特征列表的实体。