我使用的是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处理
,但它似乎没有改变任何东西
是的,所以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
中配置它