【问题标题】:Jersey: disable default JSON providerJersey:禁用默认 JSON 提供程序
【发布时间】:2015-07-28 11:42:33
【问题描述】:

我正在使用 Jersey 2.17、JSON 和自动功能发现。

我的自定义 JSON 提供程序扩展了 JacksonJsonProvider。带有@Provider注解并自动注册,与自带的默认相同:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
</dependency>

我想在不放弃功能扫描/手动注册所有内容的情况下禁用/排除默认选项。

我想出的唯一解决方案是 @Priority(Integer.MAX_VALUE) 以确保我的提供者具有更高的优先级,但我不喜欢依赖优先级的想法。

试过jersey.config.disableJsonProcessing,但似乎没有任何改变

【问题讨论】:

    标签: java jersey jackson jersey-2.0


    【解决方案1】:

    是的,Jackson 功能包含在 auto-discoverable 中,所以它会自动注册。我看到了几个选项。

    你可以...

    使用属性禁用自动发现功能

    CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE
    - or -
    "jersey.config.disableAutoDiscovery"
    

    唯一的问题是,您希望自动注册的任何其他功能(也是自动发现的)将需要再次注册。 (自动发现的功能并不多,因此禁用它可能不是什么大问题(如果有的话)。

    你可以...

    不使用jersey-media-json-jackson,而是使用

    <dependency>
        <groupId>com.fasterxml.jackson.jaxrs</groupId>
        <artifactId>jackson-jaxrs-json-provider</artifactId>
        <version>2.5.0</version>
    </dependency>
    

    jersey-media-json-jackson 实际上使用该提供程序,它实际上并没有提供任何它自己的杰克逊功能。它所做的只是注册 MBR、MBW 和 ExceptionMapper,并将其包装在 auto-discoverable 中。您扩展的JacksonJsonProviderJacksonJaxbJsonProvider 就在那里。您可能还想注册JsonParseExceptionMapperJsonMappingExceptionMapper

    还有……

    不确定为什么要扩展JacksonJsonProvider,但如果只是注册自己的ObjectMapper,更常见的方法是在ContextResolver 中配置它

    【讨论】:

      猜你喜欢
      • 2015-08-11
      • 1970-01-01
      • 1970-01-01
      • 2011-10-14
      • 2012-04-04
      • 1970-01-01
      • 2010-12-26
      • 2017-07-11
      • 1970-01-01
      相关资源
      最近更新 更多