使用Alamofire发起JSON POST请求返回400 Bad Request错误如何解决
问题原因及解决方案
核心错误:参数编码方式不匹配
你在请求头明确声明了Content-Type: application/json,且给出的curl示例也是传递JSON格式的请求体,但Alamofire代码中使用了URLEncoding编码参数,会把参数转换为表单拼接格式(如registrationNumber=xxx),服务端按照JSON规则解析请求体时无法正确读取车牌字段,因此返回格式错误。
修正方法
将请求的编码方式从URLEncoding替换为JSONEncoding即可,修正后的完整代码如下:
guard let url = URL(string: "https://driver-vehicle-licensing.api.gov.uk/vehicle-enquiry/v1/vehicles") else { return } let headers : HTTPHeaders = [ "x-api-key": "mykey", "Content-Type": "application/json" ] let params: Parameters = [ "registrationNumber" : "TE57VRN" // 测试可先用curl示例中的合法车牌 ] // 仅修改encoding参数为JSONEncoding.default AF.request(url, method: .post, parameters: params, encoding: JSONEncoding.default, headers: headers).responseJSON(completionHandler: { response in print(response) })
补充检查项
如果修改编码后仍报错,请确认你传入的registrationNumber值符合英国DVLA车牌格式规范,不要直接使用占位字符串myreg发起请求。
内容的提问来源于stack exchange,提问作者WilliamD47
相关产品推荐
相关产品推荐

