Я использую 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
Приложение transformer
имеет опцию expression
, поэтому вы можете сделать это так:
--expression='new String(payload)'
И вы получите там строку JSON в методе public String transform(Object payload)
.
Связанная проблема GH: https://github.com/spring-cloud-stream-app-starters/transform/issues/6