You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mule4 DataWeave encodeURI转义异常 调用Dynamics365接口报&字符错误

问题根因

两个核心错误导致请求失败:

  • 对OData查询语法理解错误:$select和$expand是平级的独立查询参数,你错误地把&$expand=scientist($select=employeeid)整体作为$select的参数值传入,服务端解析时会把这部分内容当成要查询的字段名,自然报语法错误。
  • 重复URL编码:MuleSoft的http:request组件会自动对query-params块中定义的所有参数名、参数值做合规的URL编码,你额外调用encodeURI属于二次编码,把本应作为参数分隔符的&、参数标识的$都转义成了%26、%24这类编码字符,服务端根本识别不到独立的$expand参数,只会认为$select传入了一长串非法字段名。
修复方案

按以下两点调整配置即可:

  1. 拆分查询参数,将$expand作为和$select平级的独立参数定义,不要嵌套在$select的参数值中
  2. 删除手动调用的encodeURI函数,由HTTP连接器自动处理参数编码,避免二次转义问题

修复后的完整请求配置如下:

<http:request method="GET" config-ref="Dynamics365_CRM_Request_Configuration" path="${dynamics365.crm.http.path}" doc:name="Request" doc:id="903e22c5-47c0-47bd-9faa-c87d217bf856" >
    <http:headers ><![CDATA[#[
    output application/java
---
{
    "Authorization" : "Bearer " ++ vars.bearerToken,
    "Prefer": "odata.maxpagesize=250, odata.include-annotations=OData.Community.Display.V1.FormattedValue",
    "Content-Type" : "application/json"
}]]]></http:headers>
    <http:query-params ><![CDATA[#[
    output application/java
---
{
    "\$select" : "consultingid,expert,scientist,host_value,numberofdaysspentconsultingannualsurvey,dateofsurvey",
    "\$expand" : "scientist($select=employeeid)"
}]]]></http:query-params>
</http:request>

说明:参数名中$前的反斜杠是DataWeave语法的转义符,用来标识这是普通字符$而非DataWeave内置的上下文对象符号,和URL编码无关。连接器发送请求时会自动对参数值里的括号等特殊字符做合规编码,最终生成的请求完全符合Dynamics 365 OData接口的格式要求。

内容的提问来源于stack exchange,提问作者hpandalai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 10:15:37