Запрос PUT в iOS (Swift) с JSONSerialization - PullRequest
0 голосов
/ 10 февраля 2020

Я пытаюсь обновить атрибут с помощью запроса PUT, используя JSONSerialization. Вот моя функция:

func updateRGPDStatus(user:UserModel){

        let parameters = ["firstname": user.firsname as Any,
                          "lastname": user.lastname as Any,
                          "mail": user.mail as Any,
                          "has_web_access": user.has_web_access as Any,
                          "has_mobile_access": user.has_mobile_access as Any,
                          "id_user": user.id_user as Any,
                          "has_accepted_rgpd": user.rgpd as Any
            ] as [String : Any]

        guard let url = URL(string: UPDATE_RGPD_STATUS) else { return }

        var request = URLRequest(url: url)
        request.httpMethod = "PUT"

        guard let httpBody = try? JSONSerialization.data(withJSONObject: parameters, options: []) else {
            return
        }
        request.httpBody = httpBody
        request.addValue("application/json", forHTTPHeaderField: "Content-Type")

        let session = URLSession.shared
        session.dataTask(with: request) { (data, response, error) in
            if let response = response {
                print(response)
            }

            if let data = data {
                do {
                    let json = try JSONSerialization.jsonObject(with: data, options: [])
                    print(json)
                }
                catch {
                    print(error)
                }
            }
        }.resume()

    }

, а вот json, который я должен обновить:

{
    "user": {
        "firstname": "first_name",
        "lastname": "last_name",
        "mail": "validEmail@mail.com",
        "has_web_access": true,
        "has_mobile_access": true,
        "id_user": 17,
        "has_accepted_rgpd": false
    }
}

Когда я отправляю свой запрос, я получаю сообщение об ошибке типа «пропущенные параметры», потому что я не включаю атрибут «пользователь» в свой запрос, который я не знаю, как это сделать на данном этапе моего обучения. Любая помощь, пожалуйста. Спасибо ^^

Ответы [ 2 ]

0 голосов
/ 10 февраля 2020

Я недавно работал с методом http, я отправил параметры, подобные этому

let param = [
         "quantity" : quantity!
        ] as [String : Any]

И это сработало для меня.

0 голосов
/ 10 февраля 2020

Можно попробовать

let res:[String : Any] = ["firstname": user.firsname as Any,
                      "lastname": user.lastname as Any,
                      "mail": user.mail as Any,
                      "has_web_access": user.has_web_access as Any,
                      "has_mobile_access": user.has_mobile_access as Any,
                      "id_user": user.id_user as Any,
                      "has_accepted_rgpd": user.rgpd as Any
        ]


let parameters:[String : Any] = ["user":res] // the new parameters
...