我正在使用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
中配置它