繁体   English   中英

DataWeave 中的 URL 编码

[英]URL encoding in DataWeave

我需要在查询参数中点击需要 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

而上面我需要传入查询参数。

我尝试使用以下 dataweave 在 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 类型,通常用于通过 HTTP 发布 Web 表单数据。 我提到了一个 Web 表单,但从技术上讲,它可以用来发送任何“类似 JSON”的数据,当你这样做时,当有多个字段时,它变成由&分隔的key=value对。
例如{"field1": "value1", "field2": "value2"}在表示为x-www-form-urlencoded时将变为field1=value1&field2=value2

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

您需要的是可用于对字符串进行编码的encodeURIComponent函数。 此外,URL 编码适用于字符串而不适用于 JSON 对象。 因此,您需要将 JSON 有效负载write为字符串。 像下面的东西

%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 显着缩短。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM