Alamofire发送Codable结构体POST参数时整型字段被转为字符串问题
问题原因
Alamofire 5.x版本中,直接将遵循Codable协议的结构体作为parameters参数传入请求方法时,默认会使用URL表单编码(URLEncoding) 处理参数,这种编码格式的规范就是将所有参数值序列化为字符串类型,无论你定义的是Int64还是其他数字类型,服务端接收时自然会得到字符串格式的字段值。
解决方案
根据服务端支持的请求体格式选择对应方案即可:
- 如果服务端要求接收
application/json格式的请求参数,直接指定使用JSON编码器即可,修改请求代码为:
let params = Parameters(id: 1, message: "test") let (targetUrl, headers) = API._generateUrlAndHeader(url) // 替换原来的parameters入参方式,指定用JSONParameterEncoder编码Encodable结构体 AF.request(targetUrl, method: .post, parameters: params, encoder: JSONParameterEncoder.default, headers: headers) .validate() .responseJSON { response in // 原有响应处理逻辑保持不变 if let data = response.data { let json = JSON(data) success(json) return } if let err = response.error { error(err) return } fatalError("should not get here") }
使用JSONParameterEncoder后,参数会被序列化为标准JSON格式放入请求体,数字类型会保留原本的整型属性,服务端即可正常识别Int64类型的id字段。
- 如果服务端仅支持
x-www-form-urlencoded格式的表单参数,无法适配JSON请求,需要协调服务端对接收的id字段做类型转换处理,因为表单编码本身不支持传递非字符串的原生类型,所有数字都会被转为字符串传输。
内容的提问来源于stack exchange,提问作者Biiiiiird
相关产品推荐
相关产品推荐

