簡體   English   中英

Spring Cloud數據流HttpClient

[英]Spring cloud data flow 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。

我在本地運行Spring Boot。

@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消息作為post請求中'arg1'參數值的值進入httpclient 目的是發布在兔子隊列上的消息被剩余發布點消耗,該消息被SpEL有效負載捕獲。

為此,我正在使用body-expression = {arg1:payload}但這不起作用,可能在語法上是錯誤的。

有什么建議么 ?

@RequestParam(value="arg1")實際上是關於請求參數的,URL之后的部分? ,稱為query stringhttps : //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,consumes = {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 | 日志

我確實嘗試在httpclient和logsink上都使用inputType = text / plain建議,並刪除了其余服務post方法上的消耗和產生,但是沒有運氣。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM