Spring集成:带snake-case的Json转换器

Spring集成:带snake-case的Json转换器,spring,spring-integration,spring-cloud-stream,spring-integration-dsl,Spring,Spring Integration,Spring Cloud Stream,Spring Integration Dsl,我正在使用Spring集成+Spring云流创建以下流: @Bean public IntegrationFlow testEventFlow(){ return IntegrationFlows.from(TestEventSink.INPUT) .transform(Transformers.fromJson(TestEvent.class)) .transform(TestEvent::getSomeId) .log()

我正在使用Spring集成+Spring云流创建以下流:

@Bean
public IntegrationFlow testEventFlow(){
    return IntegrationFlows.from(TestEventSink.INPUT)
        .transform(Transformers.fromJson(TestEvent.class))
        .transform(TestEvent::getSomeId)
        .log()
        .channel("nullChannel")
        .get();
}
测试事件类别为:

public class TestEvent {

  private String someId;

  public TestEvent(){}

  public TestEvent(String someId){
      this.someId = someId;
  }

  public String getSomeId(){
      return someId;
  }

  public void setSomeId(String someId){
      this.someId = someId;
  }
}
这里的问题是,来自TestEventsk.INPUT的消息以snake的形式出现:

{ "some_id" : "1234" }
如果我用@JsonNamingPropertyNamingStrategy.snakecasetrantegy.class注释测试事件类,它工作得很好,但我无法注释该类,因为它来自第三方库

我试图设置属性spring.jackson.property naming strategy=SNAKE\u CASE,但也不起作用

我还尝试:

@Bean
public ObjectMapper objectMapper(){
    ObjectMapper mapper = new ObjectMapper();
    mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
    return mapper;
}
但它不起作用

我认为我可以使用自定义映射器进行转换,但我正在寻找同时更改所有Spring Integration JSON转换器配置的东西


提前谢谢

您缺少将Spring Boot ObjectMapper自动配置的注入fromJson工厂的事实:


关键是Spring集成先于Spring启动,但反之亦然,因此自动配置在Spring集成中不可见。

对于PropertyNamegstrategy.SNAKE\u,如果您这样调用ObjectMapper:mapper.readValuestr,SomeClass.class;,则ObjectMapper可以工作。其中str是以字符串形式用snake-cased表示的json,SomeClass是到json的POJO映射
. transform(Transformers.fromJson(TestEvent.class), 
       new Jackson2JsonObjectMapper(objectMapper))