Azure Data Factory调用外部API遇415错误,JSON被Some()包裹求解
解决Azure Data Factory数据流API调用415错误(请求JSON含Some())
问题根源
状态码415代表不支持的媒体类型,结合你提到的请求JSON被Some()包裹的情况,核心原因是derivejsonbody步骤构造JSON时,引用的Base64编码列或文件名列被处理成了Optional类型(比如存在空值、数据流内部类型识别异常),导致生成的JSON结构不符合API预期,无法被正常解析。
修复步骤
1. 预处理列值,消除Optional包装
在selectrequiredcolumn步骤之后,新增一个派生列步骤,用coalesce()函数处理可能的空值,并强制转换为字符串类型:
coalesce(base64_content, '') as base64_content coalesce(source_filename, '') as source_filename
这一步能确保列值是确定的字符串,而非带包装的Optional类型。
2. 正确构造JSON请求体
在derivejsonbody步骤中,必须用toString()函数将列值转为纯字符串后再嵌入JSON,避免类型问题。假设API需要的JSON结构是:
{ "fileContent": "BASE64编码内容", "fileName": "源文件名" }
那么派生列的表达式应写为:
'{"fileContent": "' + toString(base64_content) + '", "fileName": "' + toString(source_filename) + '"}'
或者用更安全的json()函数构造:
json(concat('{"fileContent": "', toString(base64_content), '", "fileName": "', toString(source_filename), '"}'))
3. 检查REST调用的请求头
确认externalcall1步骤的请求头中已添加Content-Type: application/json——很多415错误都是因为没声明正确的媒体类型,API无法识别请求格式。
4. 验证JSON结构
在数据流中临时添加一个Blob接收器,输出derivejsonbody的结果,检查生成的JSON是否确实没有Some()包裹,结构是否完全匹配API要求。
额外注意
如果源文件可能为空,在SrcInputFile读取时开启跳过空文件选项,避免空值引发的类型包装问题。
内容的提问来源于stack exchange,提问作者Jaganath K
相关产品推荐
相关产品推荐

