java – Jersey:禁用默认的JSON提供程序

我正在使用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但它似乎没有改变任何东西

最佳答案 是的,所以杰克逊的功能包含在
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,并将其包装在可自动发现的内容中.您扩展的JacksonJsonProvider或JacksonJaxbJsonProvider就在那里.您可能还想注册JsonParseExceptionMapper和JsonMappingExceptionMapper.

也…

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

点赞