2016-11-24 65 views
1

官方JSON媒体类型为application/json。杰克逊,ResteasyJackson2Provider的的RESTEasy供应商,指定媒体类型是这样的:JSON提供商的正确JAX-RS媒体类型匹配

@Provider 
@Consumes({"application/*+json", "text/json"}) 
@Produces({"application/*+json", "text/json"}) 
public class ResteasyJackson2Provider extends JacksonJaxbJsonProvider 
… 

我不明白这一点。我知道"application/*+json"会匹配例如application/foo+json。但是它会匹配application/json没有加号+符号?这是在JAX-RS规范中吗?这与我期望通配符的工作方式不符,除非JAX-RS媒体类型模式匹配对媒体类型子组件语义有一定了解。

+1

我在[JAX-RS规格](http://download.oracle.com/otndocs/jcp/jaxrs-2_0-fr-eval-spec/index.html)中找不到任何东西(子类型是混合的或通配符,无组合)和['MediaType#isCompatible'](https://docs.oracle.com/javaee/7/api/javax/ws/rs/core/MediaType.html#isCompatible-javax.ws.rs .core.MediaType-)无法处理它。 'application/* + json'似乎是错误的或RestEasy的供应商特性。 – dur

+1

是的这个具体的resteasy。和“application/json”匹配“application/* + json”。参见[MediaTypeMap.SubTypeMap.getPossible](https://github.com/resteasy/Resteasy/blob/c68a7a679e0bc872e48da75eb357f6246df10ec7/resteasy-jaxrs/src/main/java/org/jboss/resteasy/core/MediaTypeMap.java#L227) – CyberWasp

+1

但它是JAX-RS的标准部分吗?我希望这可以与其他JAX-RS实现一起使用吗?请提供一个单独的答案,以便我给予参考时可以标记为正确。谢谢。 –

回答

0

在JAX-RS规范中没有关于媒体类型后缀的内容。每个提供者处理后缀就像它一样。

我睾丸与3 JAX-RS实现我的自定义供应商(生产application/*+json媒体类型):

  • 泽西(与抛弃JSON提供商) - 不能正确处理服务产生application/json媒体类型
  • RestEasy的(内部JSON提供商) - 过程的服务产生 application/json媒体类型
  • 阿帕奇CFX(内部JSON提供商) - 过程的服务产生 application/json媒体类型(如果 PARTIAL_HIERARCHICAL_MEDIA_SUBTYPE_CHECK属性是true

我recommdenation - 如果你想使用不同的JAX-RS实现不信任*+json媒体类型。添加显式application/json