我正在使用Jersey 2.17,JSON和自动功能发现。
我的自定义JSON提供程序扩展了@Provider
。它使用<dependency>
<groupId>org.glassfish.jersey.media</groupId>
<artifactId>jersey-media-json-jackson</artifactId>
</dependency>
进行注释并自动注册,与默认配置相同:
@Priority(Integer.MAX_VALUE)
我想在不放弃功能扫描/手动注册所有内容的情况下禁用/排除默认值。
我唯一提出的解决方案是jersey.config.disableJsonProcessing
,以确保我的提供商具有更高的优先级,但我不喜欢依赖优先级的想法。
尝试{{1}},但似乎没有改变任何内容
答案 0 :(得分:2)
是的,所以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,并将其包装在可自动发现的内容中。您扩展的JacksonJsonProvider
或JacksonJaxbJsonProvider
就在那里。您可能还想注册JsonParseExceptionMapper
和JsonMappingExceptionMapper
。
不确定为什么要延长JacksonJsonProvider
,但如果只是注册您自己的ObjectMapper
,更常见的方法是在ContextResolver