Нужно уточнить это ниже пары ключевых значений - PullRequest
0 голосов
/ 23 января 2020

Описание:

  1. Ввод должен быть json объект.

  2. Сортировать ключ, пары значений по алфавиту на основе ключа.

  3. Создайте выход, как указано в примере ниже.

Пример:

Ввод:

{

"name":"<<your_name>>",

"age":"<<your_age>>",

"city":"<<your_city>>",

"role":"<<your_role>>"

}

Ввод:

age=<<your_age>>&city=<<your_city>>&name=<<your_name>>&<<your_role>>

Примечание: Пожалуйста, отправьте ввод, используя почтальон, и ваш код должен работать для любого количества ключей, пар значений.

1 Ответ

0 голосов
/ 23 января 2020

Прежде всего позвольте мне сказать, что если вы намереваетесь использовать в качестве параметров запроса строку HTTP-запроса, это не очень хорошая идея. Было бы гораздо разумнее использовать HTTP-запросчик, чтобы просто отправить каждый атрибут с запросчиком в качестве параметра запроса. Он автоматически применяет кодировку URL и обрабатывает параметры.

Пример:

<set-variable value='#[{
  name:"&lt;&lt;your_name&gt;&gt;",
  age:"&lt;&lt;your_age&gt;&gt;",
  city:"&lt;&lt;your_city&gt;&gt;",
  role:"&lt;&lt;your_role&gt;&gt;"
}]' doc:name="Set Variable" variableName="person"/>

<http:request method="GET"  config-ref="HTTP_Request_configuration" path="/backend" >
    <http:query-params><![CDATA[#[vars.person]]]></http:query-params>
</http:request>

Посмотрите, как вы просто скажете ему использовать объект для генерации параметров запроса. Запрос на вывод будет выглядеть следующим образом:

GET /backend?name=%3C%3Cyour_name%3E%3E&age=%3C%3Cyour_age%3E%3E&city=%3C%3Cyour_city%3E%3E&role=%3C%3Cyour_role%3E%3E HTTP/1.1

Если вы абсолютно уверены, что вам нужно создать строку параметров запроса вручную, см. Ниже.

Пример:

%dw 2.0
output application/json
import * from dw::core::URL
---
// it is not recommended to use this, use the HTTP Requester <http:query-params> instead
encodeURI(
    payload pluck ((value, key, index) -> 
        { key: key, value: value}
    )  
    orderBy( $.key )
    reduce ((val, acc = "") -> 
        acc ++ (if(sizeOf(acc) !=0) "&" else "") ++ val.key ++ "=" ++ val.value)
)
...