Как десериализовать Json строку из кафки топи c в весенней загрузке - PullRequest
0 голосов
/ 27 марта 2020

Я создал POJO для сопоставления полезной нагрузки, полученной от топика Кафки c. Это работает, если формат полезной нагрузки:

{"payload":{"name":notification,"key":"2637","message":"This is a notif"}

Когда я создаю это сообщение JSON строкового типа.

"{\"payload\":{\"name\":\"notification\",\"key\":\"2637\",\"message\":\"This is a notif\"}"

Это бросает

Не удалось прочитать JSON: Невозможно создать экземпляр myfilename: нет конструктора аргумента sting / фабричного метода для десериализации из строкового значения.

Как это исправить?

Ответы [ 2 ]

0 голосов
/ 30 марта 2020

Возможно, ваша проблема может быть решена с помощью приведенной ниже настройки в маппере:

mapper.enable(DeserializationFeature.ACCEPT_EMPTY_STRING_AS_NULL_OBJECT);

В примечании, если вы уже используете spring-kafka, вы можете использовать по умолчанию JsonDesrializer или пользовательский десериализатор.

consumerProps.put(ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG, JsonDeserializer.class);

Дополнительные документы доступны в весенней документации

Еще одна ссылка: Десериализация сообщений kafka в KafkaConsumer с использованием springboot

0 голосов
/ 27 марта 2020

Я думаю, вам просто нужно использовать StringDeserializer, если сообщение является просто строкой, представляющей экранированный JSON, и обрабатывать сообщение как строку. Я не думаю, что вы можете автоматически связываться с POJO, потому что это не фактический JSON объект.

Вы можете написать собственный десериализатор для преобразования String, а затем делегировать его в ObjectMapper.

...