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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:06:06