Alamofire multipart/form-data请求无法传递字典数组报错如何解决?
问题原因
你对product_review_skin_concerns字段的序列化逻辑错误:直接通过"\(val)"把Swift字典转成了原生描述字符串,服务端收到的是纯文本而非预期的结构化字典类型,因此触发类型校验报错。
解决方案
根据服务端的接收规则二选一即可:
方案1:按multipart数组规范拼接字段名
如果服务端按标准表单格式解析数组,需要给字段名带上索引和字典层级标识,修改对应代码块:
if key == "product_review_skin_concerns" { guard let arr = value as? [[String:Any]] else { return } // 遍历数组带索引 for (index, val) in arr.enumerated() { // 遍历字典内的键值对拼接完整字段名 for (dictKey, dictValue) in val { let fullKey = "\(key)[\(index)][\(dictKey)]" multipartFormData.append("\(dictValue)".data(using: .utf8)!, withName: fullKey) } } }
方案2:整个数组序列化为JSON字符串传输
如果服务端要求该字段直接接收JSON格式的字符串,用JSON序列化代替Swift原生字符串转换:
if key == "product_review_skin_concerns" { guard let arr = value as? [[String:Any]], let jsonData = try? JSONSerialization.data(withJSONObject: arr), let jsonStr = String(data: jsonData, encoding: .utf8) else { return } multipartFormData.append(jsonStr.data(using: .utf8)!, withName: key) }
内容的提问来源于stack exchange,提问作者NewUser
相关产品推荐
相关产品推荐

