Anypoint平台Shell脚本创建MuleSoft API策略失败求助
解决Anypoint API策略创建时的换行符问题
问题核心
生成的policy.json文件仅包含CR(回车符)换行,不符合API端点预期的LF(换行符)或CRLF格式,导致即使字段值正确,仍被判定为缺失groupId/assetId/assetversion属性。
解决方法
1. 修正JSON文件生成逻辑
如果是通过echo或字符串拼接生成JSON,改用printf强制输出LF换行:
# 示例:生成JSON时添加LF结尾 printf '{"configurationData": {"property1": "%s","property2": "%s"},"pointcutData": null,"policyTemplateId": "%s","groupId": "%s","assetId": "%s","assetversion": "%s"}\n' \ "$prop1" "$prop2" "$templateId" "$groupId" "$assetId" "$assetVersion" > "$policy.json"
2. 强制转换文件换行符
使用工具或命令将文件转换为LF/CRLF格式:
- 用dos2unix/unix2dos(GitLab CI runner通常自带):
# 转换为LF格式 dos2unix "$policy.json" # 或转换为CRLF格式 unix2dos "$policy.json" - 用sed处理:
# 将CR替换为LF sed -i 's/\r/\n/g' "$policy.json" # 确保文件末尾有LF sed -i '$a\' "$policy.json" - 用awk处理:
awk '{print}' "$policy.json" > temp.json && mv temp.json "$policy.json"
3. 检查GitLab CI Runner环境
确认runner的Git换行符配置未被修改,避免自动转换文件格式:
git config --global core.autocrlf false
4. 直接通过curl传递JSON(绕过文件)
取消中间JSON文件,直接将内容传给curl,彻底规避换行符问题:
policy_result=$(curl --silent -X POST "https://anypoint.mulesoft.com/apimanager/api/v1/organizations/$orgId/environments/$envId/apis/$apiid/policies" \ -H "Authorization: Bearer $access_token" \ -H "Content-Type: application/json" \ -d '{ "configurationData": {"property1": "value1","property2": "value2"}, "pointcutData": null, "policyTemplateId": "12345", "groupId": "uidhud65gfu9guyfwydt", "assetId": "client-id-enforcement", "assetversion": "1.2.0" }')
额外注意:原curl命令的拼写错误
请修正以下错误,否则也会导致请求失败:
-x POST→-X POST(大写X指定HTTP请求方法)- URL中的
envirenments→environments(拼写错误) accesss_token→access_token(多了一个s)content Type→Content-Type: application/json(HTTP头格式错误)
内容的提问来源于stack exchange,提问作者user2542118
相关产品推荐
相关产品推荐

