我在我的Sping Boot 项目中使用了Kafka和@RestController。我需要为@RestController和我的Kafka类声明两个不同的ObjectMapper(Jackson)配置。其中一个是针对Kafka的,看起来像这样:
@Bean
@Primary
public ObjectMapper newJacksonJsonProvider() {
SimpleModule module = new SimpleModule();
module.addDeserializer(ZonedDateTime.class, new ZonedDateTimeCustomDeserializer());
return new ObjectMapper()
.configure(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY, true)
.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE)
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false)
.registerModule(new ParameterNamesModule())
.registerModule(module);
}
对于其余的控制器,我需要一个基本的。或者只是一个不会与上述一个冲突。
另外,我使用的是多模块的项目,所以,也许有一种可能性,如何分离它,所以不会有冲突。
1条答案
按热度按时间des4xlb01#
因此,如果您真的只需要两个ObjectMapper示例,那么我建议您实际上应该将另一个示例设置为@Primary,并使用@Qualifier注解将自定义示例注入到您特别需要它的任何位置,如下所示:
然后,您可以在需要的地方自动连接自定义设备,如下所示:
但是,由于您特别提到了Kafka,我觉得您可能更愿意为Kafka专门配置JsonSerializer/Deserializer,而不将自定义的ObjectMapper公开为bean。(有关使用Kafka自定义序列化程序/反序列化程序的详细信息,请参阅Spring Kafka文档)