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,但似乎没有改变任何东西
是的,所以 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在那里。您可能还想注册JsonParseExceptionMapper和JsonMappingExceptionMapper。
不确定为什么要扩展JacksonJsonProvider,但如果只是为了注册自己的ObjectMapper,更常见的方法是在ContextResolver