Мы только что обновили нашу Spring до:
Spring boot: 2.1.0.RELEASE
Spring cloud: Greenwich.SR1
Spring integration kafka: 3.1.0.RELEASE
Spring kafka: 2.2.7.RELEASE
и используем
Kafka 2.1.1
У нас есть тема, котораяболее одного типа экземпляров классов могут быть отправлены в один и тот же абстрактный класс.Давайте рассмотрим абстрактный класс с именем AbstractMessage и перейдем к подклассам MessageImpl1 и MessageImpl2.
Мы привыкли получать его в приемнике как объект (для записи журнала, если ошибочный класс каким-то образом получен), а затемприведите его к соответствующему MessageImpl, используя if(message instanceof MessageImpl){}
. После обновления все сообщения были привязаны к строке, а не к их классам.
Я читаю здесь , что content-type=application/json
связывается с pojo
, но даже при добавлении как на входе, так и на выходе он был связан со строкой:
spring.cloud.stream.bindings.input.contentType=application/json
spring.cloud.stream.bindings.output.contentType=application/json
Попытка получить MessageImpl напрямую вызвала эту ошибку:
Причина: com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Невозможно создать экземпляр MessageImpl1
(без создателей, как конструкция по умолчанию, существует): не может десериализовать из значения объекта (без создателя на основе делегатов или свойств) в [Source: (byte [])
Есть идеи, как это исправить?