Spring Cloud Stream @StreamListener自定义映射Jackson2MesageConverter

时间:2018-08-16 14:23:47

标签: spring spring-cloud-stream spring-rabbit jackson-databind spring-messaging

我在自己的应用程序中配置了一个自定义ObjectMapper,该自定义模块具有用于反序列化由Guava在Jackson中提供的不可变类型的自定义模块。

我的问题是我似乎无法覆盖objectMapper@StreamListener的使用,从而无法正确反序列化对象。

这是我尝试过的:

@Bean
public MessageConverter messageConverter() {
    final MappingJackson2MessageConverter mappingJackson2MessageConverter = new MappingJackson2MessageConverter();
    mappingJackson2MessageConverter.setObjectMapper(objectMapper);
    return mappingJackson2MessageConverter;
}

上面的代码片段在一个用@Configuration注释的类中,并且objectMapper在该类中定义:

    public static final ObjectMapper objectMapper = new ObjectMapper()
        .registerModule(new ParameterNamesModule(JsonCreator.Mode.PROPERTIES))
        .registerModule(new GuavaModule());

关于我可能会缺少的任何想法吗?

  • 春季靴子:1.5.10.RELEASE
  • 春季兔子::1.7.6。发布
  • Spring Cloud Stream::1.2.2。发布
  • 春季消息传递::4.3.14.RELEASE

1 个答案:

答案 0 :(得分:2)

因此,事实证明我的配置没有问题。 ObjectMapper正在选择我的自定义MappingJackson2MessageConverter。但是,未选择消息转换器,因为使用错误的内容类型标头发送了消息。

故事的寓意,请谨慎使用Content-Type,并确保其与转换器匹配。