弹簧集成:带蛇形壳的Json变压器

问题描述 投票:0回答:1

我正在使用Spring Integration + Spring Cloud Stream来创建以下流程:

@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;
  }
}

这里的问题是来自TestEventSink.INPUT的消息是蛇案:

{ "some_id" : "1234" }

如果我使用@JsonNaming(PropertyNamingStrategy.SnakeCaseStrategy.class)注释Test Event类,它运行良好,但我不能注释该类,因为它来自第三方库。

我试图设置属性spring.jackson.property-naming-strategy=SNAKE_CASE,但它也没有用。

我也尝试过:

@Bean
public ObjectMapper objectMapper(){
    ObjectMapper mapper = new ObjectMapper();
    mapper.setPropertyNamingStrategy(PropertyNamingStrategy.SNAKE_CASE);
    return mapper;
}

但它不起作用。

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

提前致谢!

spring spring-integration spring-cloud-stream spring-integration-dsl
1个回答
1
投票

你错过了将Spring Boot ObjectMapper自动配置注入fromJson()工厂的事实:

. transform(Transformers.fromJson(TestEvent.class), 
       new Jackson2JsonObjectMapper(objectMapper))

关键是Spring Integration在Spring Boot之前出现,但反之亦然,因此自动配置在Spring Integration中不可见。

© www.soinside.com 2019 - 2024. All rights reserved.