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

使用Alamofire 4.6.0(Swift4)通过PATCH请求发送空数组失败求助

解决Alamofire 4.6.0 PATCH请求无法发送空数组的问题

这个问题我之前也碰到过!Alamofire默认的参数编码逻辑确实会悄悄忽略空数组,导致你的PATCH请求里根本没带上wordTrads字段,这就是为什么Postman能正常工作但Swift代码不行的原因。

核心原因

Alamofire默认使用URLEncoding,这种编码方式会自动过滤掉空值(包括空数组),而Postman是直接将空数组作为JSON或表单数据的一部分发送的,所以API能正确识别。

解决方案:切换到JSON编码

最直接的解决办法是使用JSONEncoding来序列化参数,它会完整保留空数组的结构。修改后的代码如下:

let parameters = [ "wordTrads" : [] ]
// 使用JSON编码替代默认的URL编码
let encoding = JSONEncoding.default

Alamofire.request("\(Auth.URL_API)/lists/205", 
                  method: .patch, 
                  parameters: parameters, 
                  encoding: encoding)
         .responseJSON { response in
             print("List patched")
             // 这里可以添加响应解析或错误处理逻辑
             if let error = response.error {
                 print("请求失败:\(error.localizedDescription)")
             }
         }

验证请求是否正确发送

如果想确认空数组是否真的被发送,可以打印请求的cURL命令来检查:

let request = Alamofire.request("\(Auth.URL_API)/lists/205", 
                                method: .patch, 
                                parameters: parameters, 
                                encoding: encoding)
print(request.cURLRepresentation())

执行后你会看到类似这样的输出,其中明确包含了{"wordTrads": []}:

curl -i
-X PATCH
-H "Content-Type: application/json"
-d "{"wordTrads":[]}"
"https://your-api-url.com/lists/205"

如果你需要表单编码(非JSON)

如果你的API期望接收表单编码的数据而非JSON,可以自定义URLEncoding的行为,确保空数组不被过滤:

// 自定义URL编码,保留空数组
let urlEncoding = URLEncoding(arrayEncoding: .brackets, boolEncoding: .literal)

Alamofire.request("\(Auth.URL_API)/lists/205", 
                  method: .patch, 
                  parameters: parameters, 
                  encoding: urlEncoding)
         .responseJSON { response in
             print("List patched")
         }

这种方式会将空数组编码为wordTrads[]=(具体格式取决于arrayEncoding的设置),确保API能接收到这个字段。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:42:11