Весенняя интеграция: трансформатор Json со змеиным корпусом - PullRequest
0 голосов
/ 07 апреля 2019

Я использую 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" }

Если я аннотирую класс Test Event с помощью @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;
}

Но это не сработало.

Я думаю, что могу использовать собственный преобразователь для этого преобразования, но я ищу что-то, что изменяет конфигурацию всех преобразователей Spring Integration JSON одновременно.

Заранее спасибо!

1 Ответ

1 голос
/ 07 апреля 2019

Вам не хватает того факта, что автоматически настроенный Spring Boot ObjectMapper вводится в fromJson() фабрику:

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

Дело в том, что Spring Integration предшествует Spring Boot, а не наоборотпоэтому автоконфигурация не видна в Spring Integration как есть.

...