URL 在 mulesoft 中编码

URL encoding in mulesoft

我需要点击一个需要在查询参数中进行 URL 编码的服务,我的输入如下:

{
"test" : ["123", "124"]
}

当我使用 https://www.urlencoder.io/ 编码时,我得到以下格式:

%7B%0A%09%22test%22%20%3A%20%5B%22123%22%2C%20%22124%22%5D%0A%09%7D

以上我需要传入查询参数

我尝试使用以下数据编织在 mulesoft 中生成上述 URL 编码器输出:

%dw 2.0
output application/x-www-form-urlencoded
---
payload

但它给了我下面的输出,这不是我想要的:

test=123&test=124

所以请告诉我如何为上述输入在 mule 中生成以下模式:

%7B%0A%09%22test%22%20%3A%20%5B%22123%22%2C%20%22124%22%5D%0A%09%7D

您正在混合两个截然不同的概念。

application/x-www-form-urlencoded 是一种 MIME 类型,通常用于 POST 通过 HTTP 的 Web 表单数据。我提到了一个 Web 表单,但从技术上讲,它可以用于发送任何“JSON 类”数据,当您这样做时,当有多个字段时,它会变成 key=value 对,由 & 分隔。
例如 {"field1": "value1", "field2": "value2"} 表示为 x-www-form-urlencoded

时将变为 field1=value1&field2=value2

另一方面,URL Encoding 用于 “百分比编码” 某些在 URL 中不允许的字符(如非 ASCII 字符) 或对 URL 具有特殊含义(如 ?&),以便您可以安全地使用它来构造 URL.

您需要的是 encodeURIComponent function that you can use to encode your String. Also, URL encoding is for Strings not for JSON Objects. So you will need to write JSON 字符串形式的有效负载。如下所示

%dw 2.0
import encodeURIComponent from dw::core::URL
output application/java
---
encodeURIComponent(
    write(payload, "application/json")
)

请记住,在将有效负载写入 String 时,根据是否要保留缩进,您会得到不同的结果。例如,这会给你一个与上面不同的(并且更短的)结果。

%dw 2.0
import encodeURIComponent from dw::core::URL
output application/java
---
encodeURIComponent(
    write(payload, "application/json", {indent: false}) // Shorter URL as it will not keep indentation
)

如果您使用它来生成 URL,最好 不要 保留缩进,因为它会显着保留 URL更短。