Как можно отправить вложенный объект в теле запроса API Alamofire? - PullRequest
1 голос
/ 13 июля 2020

Я пытался использовать 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
            }
        }
    ]
}

1 Ответ

2 голосов
/ 13 июля 2020

Вам нужно отправить запрос как application/json, поэтому используйте JSONEncoding.default как параметр encoding.

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

Дополнение: Также вы можете потерять Content-Type из параметров заголовка . AF позаботится об этом за вас.

...