Jersey:禁用默认 JSON 提供程序

Jersey: disable default JSON provider

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

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

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

我想 disable/exclude 默认一个而不放弃功能 scanning/manually 注册所有内容。

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

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

是的,所以 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 实际上使用了那个提供者,它实际上并没有提供任何它自己的 Jackson 功能。它真正做的就是注册 MBR、MBW 和 ExceptionMapper,并将其包装在自动发现中。您扩展的 JacksonJsonProviderJacksonJaxbJsonProvider 就在那里。您可能还想注册 JsonParseExceptionMapperJsonMappingExceptionMapper.

还有...

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