代码之家  ›  专栏  ›  技术社区  ›  italktothewind

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

  •  0
  • italktothewind  · 技术社区  · 7 年前

    @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) 它工作得很好,但是我不能注释类,因为它来自第三方库。

    spring.jackson.property-naming-strategy=SNAKE_CASE ,但也不起作用。

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

    但没用。

    提前谢谢!

    0 回复  |  直到 7 年前
        1
  •  1
  •   Artem Bilan    7 年前

    您缺少一个事实,即注入由Spring Boot自动配置的 ObjectMapper fromJson() 工厂:

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

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