如何在 Alamofire API 请求的主体中发送嵌套对象?

Posted

技术标签:

【中文标题】如何在 Alamofire API 请求的主体中发送嵌套对象?【英文标题】:How can you send a nested object in the body of an Alamofire API request? 【发布时间】:2020-07-13 15:16:39 【问题描述】:

我尝试使用 Alamofire 发出这样的 API 请求:

let param = ["id":"xy", "products":[["quantity":2, "product":["id":123]]]]

Alamofire.request(url, method: .post,
                   parameters: param, encoding: URLEncoding.default, 
                      headers: ["Accept": "application/json", "Content-Type": "application/json"]).responseJSON ..

我收到了这个回复:

message = "Unexpected token i in JSON at position 0";
statusCode = 400;

我也尝试过这样的请求:

request.httpBody = try! JSONSerialization.data(withJSONObject: param)

我尝试手动执行以下请求以确保它工作正常:

curl -X POST http://url -d'"id":"xy", "products" ["quantity":2,"product":"id":123]' -H'Content-Type: application/json'

根据需要,它给了我这样的回应:


    "id":"xy",
    "products":[
        
            "quantity":2,
            "product":
                "id":123
            
        
    ]

【问题讨论】:

提示:既然你有一个工作卷曲,你知道 Alamofire 可以将它的请求打印为卷曲吗?然后你可以比较和发现问题。见***.com/questions/53637437/alamofire-with-d/… 然后就可以看到github.com/Alamofire/Alamofire/blob/master/Source/…放了什么参数,改一下 【参考方案1】:

您需要以application/json 发送请求,因此请使用JSONEncoding.default 作为encoding 参数。

Alamofire.request( url, method: .post , parameters: param, encoding: JSONEncoding.default , headers: ["Accept": "application/json",
                      "Content-Type": "application/json"])

附加组件:此外,您可以从标头参数中删除Content-TypeAF 会为您解决这些问题。

【讨论】:

以上是关于如何在 Alamofire API 请求的主体中发送嵌套对象?的主要内容,如果未能解决你的问题,请参考以下文章

图片不会在我的 Alamofire .post 请求中发送到我的后端 - Swift 3

Alamofire 不允许直接发送对象

如何在 Alamofire 中使用相同的 API 函数 .PUT 请求更新 JSON

api请求失败时如何在swift alamofire中使用responsedecodable解析错误

在 swift 中使用 Alamofire 取消 api 请求

我如何请求参数 Alamofire 表单数据?