Jersey:禁用默认 JSON 提供程序

sv1*_*v13 5 java jersey jackson jersey-2.0

我正在使用 Jersey 2.17、JSON 和自动功能发现。

我有我的自定义 JSON 提供程序扩展JacksonJsonProvider. 它带有注释@Provider并自动注册,与附带的默认注释相同:

<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)

我想禁用/排除默认选项,而不放弃功能扫描/手动注册所有内容。

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

尝试过jersey.config.disableJsonProcessing,但似乎没有改变任何东西

Pau*_*tha 4

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

你可以...

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

CommonProperties.FEATURE_AUTO_DISCOVERY_DISABLE
- or -
"jersey.config.disableAutoDiscovery"
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,您希望自动注册的任何其他功能(也是自动发现的)将需要再次注册。(自动发现的功能并不多,因此禁用它可能不是什么大问题(如果有的话)。

你可以...

不使用jersey-media-json-jackson而是使用

<dependency>
    <groupId>com.fasterxml.jackson.jaxrs</groupId>
    <artifactId>jackson-jaxrs-json-provider</artifactId>
    <version>2.5.0</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

jersey-media-json-jackson实际上使用该提供程序,它实际上并不提供任何它自己的 Jackson 功能。它实际上所做的只是注册 MBR、MBW 和 ExceptionMapper,并将其包装在自动发现中。JacksonJsonProvider你扩展的 or就JacksonJaxbJsonProvider在那里。您可能还想注册JsonParseExceptionMapperJsonMappingExceptionMapper

还...

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