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

Swift发送Codable结构体请求被Express识别为单键JSON的原因求解

问题原因

你遇到的异常是因为未给URLRequest设置正确的请求头,后台将JSON格式的请求体错误识别为x-www-form-urlencoded表单格式,因此会把整个JSON字符串解析为表单的键名,对应值为空,完全匹配你给出的后台接收结果。

解决步骤
  • 核心修复:在构造请求的代码中添加Content-Type声明,在request.httpMethod = method代码后新增一行:
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
  • 验证编码正确性:添加调试代码确认JSONEncoder输出的结构符合预期,排除编码逻辑异常:
let requestData = try? JSONEncoder().encode(data)
// 新增调试代码
if let data = requestData, let jsonStr = String(data: data, encoding: .utf8) {
    print("编码后请求体:\(jsonStr)")
    // 正常输出应为:{"email":"test","password":"test2"}
}
  • 排查底层逻辑:检查网络封装是否存在二次处理httpBody的逻辑,比如将已经编码好的JSON数据又作为参数传入表单序列化方法,导致重复编码。
  • 确认Encoder配置:如果你的JSONEncoder有自定义配置,检查是否存在keyEncodingStrategy等异常配置,默认配置不会引发该问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 22:09:01