Swift中如何使用Alamofire正确构造PUT请求的请求体
错误原因
你的参数构造存在两个问题,直接导致请求不符合接口要求:
- 额外多嵌套了一层
request键:目标请求体的最外层就是context_uri、offset、position_ms三个字段,不需要在外层包裹request字典 offset字段类型错误:接口要求offset是嵌套对象,你传入了空字符串,不符合结构要求
正确写法
首先构造和接口要求完全匹配的参数字典:
let parameters: [String: Any] = [ "context_uri": "spotify:album:5ht7ItJgpBH7W6vJ5BqpPr", "offset": [ "position": 5 ], "position_ms": 0 ]
发起PUT请求时必须指定编码格式为JSON编码,Alamofire默认使用表单编码,会导致请求体格式错误:
// 替换为实际接口地址 let apiURL = "你的目标请求地址" AF.request(apiURL, method: .put, parameters: parameters, encoding: JSONEncoding.default, headers: [ // 按需添加请求头,比如Spotify接口需要的Authorization鉴权头 ]) .validate() // 自动校验2xx状态码,非2xx会直接走failure回调 .response { resp in switch resp.result { case .success(let data): // 处理请求成功逻辑,比如解析返回数据 if let data = data { debugPrint("返回数据: \(String(data: data, encoding: .utf8) ?? "")") } case .failure(let err): // 处理请求失败逻辑 debugPrint("请求错误: \(err)") } }
补充说明
- 使用
JSONEncoding.default时,Alamofire会自动给请求添加Content-Type: application/json请求头,不需要手动设置 offset里的position值从0开始计数,对应专辑里的曲目序号,根据实际业务需求修改即可- 如果需要从指定时间点开始播放,修改
position_ms的值即可,单位是毫秒
内容的提问来源于stack exchange,提问作者Jack Hoskins
相关产品推荐
相关产品推荐

