Полезная нагрузка аргумента spring cloud consumer всегда получает объект байтового массива

Я использую Spring Cloud Edgware. Выпуск SR3 и Spring Cloud Stream 2.0.1.

Я создал приложение testprocessor, используя Spring Cloud Stream 2.0. Создал образец потока:

stream create TEST1 --definition "http --server.port=8888 | testprocessor | uploader --spring.cloud.stream.bindings.input.contentType='text/plain1' "

Развернут в Spring локальный облачный сервер.

//testprocessor apps method signature is
@StreamListener(Processor.INPUT)
@sendto(Processor.OUTPUT)
public String transform(Object payload) {

}

В application.properties этого приложения я настроил следующие свойства spring.cloud.stream.bindings.input.content-type=application/json;

Пример исходных данных:

http post --contentType 'application/json' --data '{\"isbn\": \"1599869772", "title": "The Art of War", "author": "Sun Tzu"}' --target http://localhost:8888

Когда я публикую выше образцы данных, я всегда получаю полезную нагрузку объекта - это объект byte[], например [B@5b2ff6e7, но не получаю фактическую строку JSON. Не могли бы вы помочь в этом вопросе?

Примечание: если я создам такое же приложение testprocessor, используя версию Spring Cloud Stream 1.3.1. Работает нормально. Я получаю строку JSON. Почему не работает Spring Cloud Stream 2.0.1

1
0
462
1

Ответы 1

Приложение transformer имеет опцию expression, поэтому вы можете сделать это так:

--expression='new String(payload)'

И вы получите там строку JSON в методе public String transform(Object payload).

Связанная проблема GH: https://github.com/spring-cloud-stream-app-starters/transform/issues/6

Другие вопросы по теме