ADF复制活动中如何使用带动态请求体的REST接口作为数据源?
ADF动态传递REST请求体并保存响应为JSON文件的实现方案
ADF复制活动的REST数据源默认会将字符串类型的动态内容识别为JSON字段值,自动添加引号、转义特殊字符,且默认会为请求体包裹JSON大括号,直接传入动态字符串就会出现你遇到的异常转义问题。
方案1:修复复制活动REST源请求体(更简洁,无需额外活动)
直接用@json()函数将Lookup输出的请求体内容转换为JSON对象类型,避免ADF自动转义:
- 打开复制活动的REST源配置,找到请求体设置项
- 动态内容填写为
@json(activity('你的Lookup活动名称').output.你要取的请求体字段),示例如下:@json(activity('GetRequestBody').output.firstRow.request_body) - 不需要手动修改代码视图的自动生成大括号,
@json()输出的JSON对象会直接填充到请求体结构中,不会出现多余转义或套括号问题 - Sink端直接配置目标JSON/二进制数据集,即可将接口响应直接保存为JSON文件
方案2:Web活动+复制活动组合(适合复杂接口场景,兼容你已调试好的Web活动配置)
你已经验证Web活动可以正常调用接口,只需新增1个复制活动即可实现响应存文件:
- 保留你已调试完成的Web活动,动态请求体无需修改,确保接口可以正常返回JSON响应
- 新增复制活动,连接在Web活动之后
- 复制活动源配置:
- 源类型选择二进制
- 选择「内联内容」作为输入
- 内联内容的动态值填写为
@activity('你的Web活动名称').output.Response
- 复制活动Sink配置:
- 选择你要存储文件位置对应的二进制/JSON数据集
- 如果需要格式化JSON输出,可在JSON数据集的格式设置中选择「数组格式」或「每行一个JSON对象」
- 运行后Web活动的响应内容会直接写入目标文件,无额外转义
常见问题排查
- 如果Lookup输出的请求体本身包含预转义的引号,可先用
replace()函数清理后再套@json(),示例:@json(replace(activity('GetRequestBody').output.firstRow.request_body, '\\"', '"')) - 若接口响应大小超过2MB,不要用Set Variable中转响应内容,直接用上述两个方案处理即可避免大小限制
内容的提问来源于stack exchange,提问作者valdur
相关产品推荐
相关产品推荐

