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

时间:2015-05-16 16:48:05

标签: java jersey jackson jersey-2.0

我正在使用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}},但似乎没有改变任何内容

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,并将其包装在可自动发现的内容中。您扩展的JacksonJsonProviderJacksonJaxbJsonProvider就在那里。您可能还想注册JsonParseExceptionMapperJsonMappingExceptionMapper

也...

不确定为什么要延长JacksonJsonProvider,但如果只是注册您自己的ObjectMapper,更常见的方法是在ContextResolver

中对其进行配置