使用 JSONSerialization 将请求放入 iOS (Swift)

PUT request in iOS (Swift) with JSONSerialization

我正在尝试使用 JSONSerialization 通过 PUT 请求更新属性。 这是我的功能:

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
    }
}

当我发送我的请求时,我得到了 "missing parameters" 类型的错误,因为我没有在我的请求中包含 "user" 属性,我不知道该怎么做我的学习阶段。请任何帮助。谢谢^^

你可以试试

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

我最近使用 http put 方法发送了这样的参数

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

这对我有用。