【问题标题】:JAX-RS/Jersey response 406 with no entity but RFC 2616 recommends oneJAX-RS/Jersey 响应 406 没有实体,但 RFC 2616 推荐一个
【发布时间】: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


    【解决方案1】:

    回答我自己的问题... 我在 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 月。在不久的将来,这个问题几乎不会有任何变化。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-08-06
      • 2020-12-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-06-19
      • 2018-12-16
      • 2017-03-09
      相关资源
      最近更新 更多