2

我正在使用 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 场景中可用实体特征列表的实体。

4

1 回答 1

0

回答我自己的问题......我在 Jersey 项目中打开一张票来解决这个问题。Jersey 社区迅速回答我说 Java Spec to Webservice 已经错了。应该在 JAX 项目(Java Spec to Web Services)中打开一个新的票据,以便在未来的 Jersey 中实现正确的行为。

https://java.net/jira/browse/JAX_RS_SPEC-363

但是,检查 JAX 项目可以找到 63 个未分配的票证 (100%)。

https://java.net/jira/browse/JAX_RS_SPEC/fixforversion/14716

“所以呢?”

这个 Jira 的最后一次活动是在 2013 年 11 月。最后一次开票是在 2013 年 5 月。第一次是在 2009 年 1 月。在不久的将来,这个问题几乎不会有任何变化。

于 2014-01-22T17:11:43.387 回答