Передача аргумента Array в GET-запросе в mulesoft - PullRequest
0 голосов
/ 03 октября 2019

Я передаю массив в API в качестве аргумента для запроса get. Я новичок, чтобы передать этот массив в качестве параметра запроса HTTP-реквестеру.

Я использую переменную потока для строки и чисел. Но я не знаю, что использовать для массивов.

Я видел несколько примеров использования области foreach и пробовал это, но мне сказали, что я не могу использовать foreach в http: request-builder. Пожалуйста, есть ли работа вокруг этого? Я новичок в Mulesoft. Спасибо

иллюстрация

https://apiEndPoint/api/Get?param1=Americas&param2=00MA&param3=Disruption&param3=SomethingElse

param1 и param2 захватываются переменными потока и отправляются с запросчиком HTTP

Использованиепеременная потока для param3 перезаписывает разрыв с чем-то другим

<http:request-builder>
                <http:query-param paramName="param1" value="#[flowVars.param1]" />
                <http:query-param paramName="param2" value="#[flowVars.param2]" />
                <http:query-param paramName="param3"value="#[flowVars.param3]" />

</http:request-builder>

Ответы [ 2 ]

0 голосов
/ 08 октября 2019

При настройке запросчика http я добавил параметры запроса и это выражение

# [message.inboundProperties ['http.query.params']]

И это исправило проблему дляменя. Мне не нужно было снова устанавливать переменные.

<http:request-builder>
            <http:query-params
                expression="#[message.inboundProperties['http.query.params']]" />


        </http:request-builder>
0 голосов
/ 06 октября 2019

Одним из решений является создание карты из списка с ключами 'param1', 'param2' и т. Д. Построитель HTTP-запросов позволяет использовать карту для генерации всех параметров запроса, используя ключи в качестве имен. Для создания карты я использовал DataWeave:

    <flow name="test-array-query-paramFlow">
        <http:listener config-ref="HTTP_Listener_Configuration" path="/test" doc:name="HTTP"/>
        <set-variable variableName="myArray" value="#[ [ 'Americas','00MA', 'Disruption', 'SomethingElse' ] ]" doc:name="Variable"/>
        <dw:transform-message doc:name="Transform Message">
            <dw:set-variable variableName="params"><![CDATA[%dw 1.0
%output application/java
---
( flowVars.myArray map {
  ("param" ++ ($$ as :number +1)) : $
} )  reduce ((val, acc = {}) -> acc ++ val)
]]></dw:set-variable>
        </dw:transform-message>
        <logger message="payload #[flowVars.params]" level="INFO" doc:name="Logger"/>
        <http:request config-ref="HTTP_Request_Configuration" path="/api" method="GET" doc:name="HTTP">
            <http:request-builder>
                <http:query-params expression="#[flowVars.params]"/>
            </http:request-builder>
        </http:request>
</flow>

Включение HTTP-протоколирования проводов мы можем подтвердить, что параметры генерируются, как и ожидалось:

GET /api?param1=Americas&param2=00MA&param3=Disruption&param4=SomethingElse HTTP/1.1
...