Весенний облачный поток данных Httpclient

У меня есть следующий поток.Контекст проблемы

1.

rabbit --password='******' --queues=springdataflow-q --virtual-host=springdataflow --host=172.24.172.184 --username=springdataflow | transform | httpclient --url-expression='http://172.20.24.47:8080/push' --http-method=POST --headers-expression={'Content-Type':'application/x-www-form-urlencoded'} --body-expression={arg1:payload} | log

2.

У меня есть весенний ботинок, бегущий локально.

@RestController
public class HelloController {



    @RequestMapping(value = "/push", method = RequestMethod.POST,produces = {MediaType.TEXT_PLAIN})
      public String pushMessage(@RequestParam(value="arg1") String payload) {
        System.out.println(payload);
        return payload;
      } 
}
  1. Я хотел бы, чтобы сообщение кролика пришло в httpclient в качестве значения для параметра 'arg1' для пост-запроса. Смысл в том, что сообщение, опубликованное в очереди кроликов, используется точкой поста отдыха, причем сообщение захватывается полезной нагрузкой SpEL.

Для этого я использую body-expression = {arg1:payload} но это не работает, может быть, синтаксически неправильно.

Какие-либо предложения?

2 ответа

@RequestParam(value="arg1") действительно о параметре запроса, часть URL после ?, который называется query string: https://en.wikipedia.org/wiki/Query_string.

Итак, если вы действительно хотели бы иметь arg1=payload пара в строке запроса, вам нужно использовать правильный url-expression:

--url-expression='http://172.20.24.47:8080/push?arg1='+payload

Кажется, это работает для передачи строк в качестве полезных данных. Похоже, по умолчанию полезная нагрузка становится requestbody. Поэтому в оставшейся службе я внес изменение: @RequestMapping(value = "/pushbody", method = RequestMethod.POST, потребляет = {MediaType.TEXT_PLAIN}) public String pushBody(@RequestBody String payload) { System.out.println(Полезная нагрузка); возврат полезной нагрузки; }

И поток, который сейчас работает, выглядит следующим образом: rabbit --password = '******' --queues = springdataflow-q1 --host = 172.24.172.184 --virtual-host = springdataflow --username = springdataflow | httpclient --http-method = POST --headers-expression = {'Content-Type': 'text / plain'} --url = http://172.20.24.47:8080/pushbody | журнал

Я попытался с предложением inputType= text/plain как для httpclient, так и для logsink, и удалил потребляющие ресурсы и производит метод оставшейся службы post, но не повезло.

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