JAX-RS / Jersey响应406没有实体但RFC 2616推荐一个

时间:2012-12-12 21:44:29

标签: java http-headers jersey jax-rs rfc

我在泽西岛的Java Web Service工作。我想了解如何处理以下问题:

显然,对于具有406状态的每种情况,JAX-RS (JSR 311)表示响应将没有实体。例如,在3.7.2请求匹配中,确定将处理请求的方法:

  

可接受的响应实体主体媒体类型中的至少一个是支持的输出数据   格式(参见第3.5节)。如果没有方法支持可接受的响应实体主体之一   媒体类型实现必须生成带有的WebApplicationException   不可接受的响应(HTTP 406状态),没有实体。必须按照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场景中可用实体特征列表的实体。

1 个答案:

答案 0 :(得分:0)

回答我自己的问题...... 我在泽西项目中打开一张票来解决这个问题。泽西社区立即回答我,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月。在不久的将来,这个问题几乎没有任何变化。