如何在 Alamofire API 请求的正文中发送嵌套对象?
How can you send a nested object in the body of an Alamofire API request?
我尝试使用 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
}
}
]
}
您需要将请求作为 application/json
发送,因此使用 JSONEncoding.default
作为 encoding
参数。
Alamofire.request( url, method: .post , parameters: param, encoding: JSONEncoding.default , headers: ["Accept": "application/json",
"Content-Type": "application/json"])
Add-on:另外,您可以从 header 参数中删除 Content-Type
。 AF
会为您处理。
我尝试使用 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
}
}
]
}
您需要将请求作为 application/json
发送,因此使用 JSONEncoding.default
作为 encoding
参数。
Alamofire.request( url, method: .post , parameters: param, encoding: JSONEncoding.default , headers: ["Accept": "application/json",
"Content-Type": "application/json"])
Add-on:另外,您可以从 header 参数中删除 Content-Type
。 AF
会为您处理。