提问者:小点点

泽西岛:禁用默认 JSON 提供程序


我使用的是Jersey 2.17、JSON和自动功能发现。

我有我的自定义JSON提供程序扩展<code>JacksonJsonProvider</code>。它用@Provider进行注释,并自动注册,与以下默认值相同:

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

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

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

尝试了jersey.config.disableJson处理,但它似乎没有改变任何东西


共1个答案

匿名用户

是的,所以Jackson功能被封装在一个可自动发现的功能中,所以它是自动注册的。我看到了几个选项。

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

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>

< code > jersey-media-JSON-jackson 实际上使用了该提供程序,它实际上并不提供任何自己的Jackson功能。它所做的只是注册MBR、MBW和ExceptionMapper,并将其包装在自动发现的。您扩展的< code>JacksonJsonProvider或< code > JacksonJaxbJsonProvider 就在那里。您可能还需要注册< code > jsonparseeexceptionmapper 和< code > JsonMappingExceptionMapper 。

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