Конфликт десериализатора JSON с веб-сайтом Spring Boot Starter и потоком Spring Cloud

#spring-boot #gradle #jackson #spring-cloud-stream #spring-boot-actuator

#spring-boot #gradle #джексон #spring-cloud-stream #spring-boot-actuator

Вопрос:

У меня есть довольно простое Java-приложение, которое прослушивает тему Kafka для сообщений JSON.

Это основные зависимости и версии:

 id 'org.springframework.boot' version '2.3.5.RELEASE'
...
set('springCloudVersion', "Hoxton.SR9")
...
implementation 'org.springframework.cloud:spring-cloud-stream'
implementation 'org.springframework.cloud:spring-cloud-stream-binder-kafka'
 

application.properties Конфигурация, которая определяет формат JSON:

 spring.cloud.stream.bindings.listener-in-0.content-type = application/json
 

И «основной цикл»:

 @Bean
public Consumer<Message<MyDataModel>> listener() {
    return message -> {
        ...
 

И это действует как заклинание. Но теперь я пытаюсь добавить /metrics конечную точку в приложение с помощью библиотеки Actuator:

 implementation 'org.springframework.boot:spring-boot-starter-web'
implementation 'org.springframework.boot:spring-boot-starter-actuator'
 

После добавления их в build.gradle , ничего не меняя в самом коде, потребителю в приведенном выше фрагменте не удается десериализовать входящие сообщения, каждое поле объекта модели равно null.

Очевидно, spring-boot-starter-web что пакет перезаписывает механизм обработки JSON, который поставляется вместе с spring-cloud-stream библиотекой, но я понятия не имею, что делать. Экспериментировал с исключением частей библиотеки web-starter и изменением версии SpringBoot, но пока безуспешно.

Комментарии:

1. Это больше похоже на какую-то регрессию. Не могли бы вы поднять вопрос — github.com/spring-cloud/spring-cloud-stream/issues . Вы можете включить ссылку на этот пост, чтобы избежать дублирования ваших выводов.

2. Добавлена проблема там, но все еще надеюсь на исправление, основанное на исключении чего-либо или каким-то образом указывающее, какой десериализатор использовать.

3. Я ответил на проблему и предоставил полный образец. Я не могу воспроизвести то, что вы описываете. Возможно, есть другие зависимости, которые являются частью вашего пути к классу, которые могут мешать, но пока это не похоже на привод. Как было предложено в комментарии к проблеме, если вы все еще считаете, что проблема существует, пожалуйста, предоставьте образец, который мы можем использовать для воспроизведения проблемы.

Ответ №1:

Обновление версии springboot до 2.4.2 с версии 2.3.5.RELEASE и версии spring-cloud до 2020.0.1 с Hoxton.SR9 решило проблему для нас.