Alamofire POST请求报错:Invalid value around line 1, column 0 求助
问题排查与修复方案
核心错误原因
这个错误是服务器返回的内容不是合法JSON格式,导致Alamofire的responseJSON无法完成解析。根源出在你的请求构造逻辑上。
代码中的关键问题
HTTP头构造完全错误
你用var headers = HTTPHeaders(parameters)把请求体参数直接当成HTTP头字段,这是严重错误。HTTPHeaders的该初始化方法是用来生成请求头键值对的,而你的parameters是要放在请求体里的业务参数,不能直接转为请求头。这种错误会导致服务器无法正确处理请求,最终返回非JSON的错误响应。冗余的Content-Type设置
当你使用URLEncoding.httpBody编码方式时,Alamofire会自动设置正确的Content-Type: application/x-www-form-urlencoded; charset=utf-8请求头,手动添加反而可能造成字段冲突。
修复后的代码
func apiPostRequest1(parameters:[String:String], url:String, completionHandler: @escaping (Any?) -> Swift.Void) { // 初始化空的请求头,如需自定义头(如Token)再单独添加 var headers = HTTPHeaders() // headers.add(name: "Authorization", value: "your_custom_token") session.request(url, method: .post, parameters: parameters, encoding: URLEncoding.httpBody, headers: headers) .validate(statusCode: 200..<600) .responseJSON{ response in switch response.result { case .success(let JSON): completionHandler(JSON) case .failure(let error): print("Request failed with error \(error)") // 打印服务器原始响应,方便排查非JSON返回的具体内容 if let data = response.data, let rawResponse = String(data: data, encoding: .utf8) { print("Server raw response: \(rawResponse)") } completionHandler(response.response?.statusCode) } } }
额外排查建议
- 修复代码后,查看控制台打印的
Server raw response内容:如果是合法JSON,说明问题已解决;如果仍是HTML、纯文本等非JSON内容,需要和后端确认接口的响应格式是否符合约定。 - 用Postman等工具模拟相同请求,验证服务器返回内容是否为合法JSON,排除服务器端问题。
内容的提问来源于stack exchange,提问作者Bhimashankar
相关产品推荐
相关产品推荐

