Mule4 DataWeave encodeURI转义异常 调用Dynamics365接口报&字符错误
问题根因
两个核心错误导致请求失败:
- 对OData查询语法理解错误:
$select和$expand是平级的独立查询参数,你错误地把&$expand=scientist($select=employeeid)整体作为$select的参数值传入,服务端解析时会把这部分内容当成要查询的字段名,自然报语法错误。 - 重复URL编码:MuleSoft的
http:request组件会自动对query-params块中定义的所有参数名、参数值做合规的URL编码,你额外调用encodeURI属于二次编码,把本应作为参数分隔符的&、参数标识的$都转义成了%26、%24这类编码字符,服务端根本识别不到独立的$expand参数,只会认为$select传入了一长串非法字段名。
修复方案
按以下两点调整配置即可:
- 拆分查询参数,将
$expand作为和$select平级的独立参数定义,不要嵌套在$select的参数值中 - 删除手动调用的
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
相关产品推荐
相关产品推荐

