Что я делаю неправильно в своей JSON Post?

Я должен заполнить модель данными, которые поступают из Restful API. В моем коде я десериализую свой JSON таким образом:

func DoLogin(_ user:String, _ psw:String) { let url = URL(string: "http://162.209.99.39:8080/MiClaroBackend/auth") let session = URLSession.shared let request = NSMutableURLRequest(url: url!) request.httpMethod = "POST" let paramToSend = "username=" + user + "&password=" + psw request.httpBody = paramToSend.data(using: String.Encoding.utf8) let task = session.dataTask(with: request as URLRequest, completionHandler: { (data, response, error) in guard let _:Data = data else { return } let json:AnyObject? do { json = try JSONSerialization.jsonObject(with: data!, options: .mutableContainers) as? NSDictionary if let parseJSON = json{ let userInfo = parseJSON["userInfo"] as! NSDictionary self.loginModel.firstNames = userInfo["firstNames"] as! String self.loginModel.lastNames = userInfo["lastNames"] as! String self.loginModel.claroClubPoints = userInfo["claroClubPoints"] as! Int self.loginModel.imageProfileUrl = userInfo["imageProfileUrl"] as! String let mainProductService = parseJSON["mainProductService"] as! NSDictionary self.loginModel.idProductService = mainProductService["idProductService"] as! Int self.loginModel.lineType = mainProductService["lineType"] as! Int self.loginModel.lineName = mainProductService["lineName"] as! String self.loginModel.lineAlias = mainProductService["lineAlias"] as! String self.loginModel.profileType = mainProductService["profileType"] as! Int self.loginModel.idAccount = mainProductService["idAccount"] as! Int self.loginModel.idReceipt = mainProductService["idReceipt"] as! Int self.loginModel.category = mainProductService["category"] as! Int self.loginModel.clientType = mainProductService["clientType"] as! Int let userData = parseJSON["userData"] as! NSDictionary self.loginModel.userClientType = userData["clientType"] as! Int self.loginModel.docType = userData["docType"] as! Int self.loginModel.docNum = userData["docNum"] as! Int self.loginModel.email = userData["email"] as! String self.loginModel.msisdn = userData["msisdn"] as! Int let defaultServiceResponse = parseJSON["defaultServiceResponse"] as! NSDictionary self.loginModel.idTransaction = defaultServiceResponse["idTransaction"] as! String self.loginModel.message = defaultServiceResponse["message"] as! String self.loginModel.idResponse = defaultServiceResponse["idResponse"] as! Int } } catch { let error = ErrorModel() error.phrase = "PARSER_ERROR" error.code = -1 error.desc = "Parser error in login action" } }) task.resume() } 

Но я действительно не знаю, что я делаю неправильно, потому что результат моего LoginModel полностью пуст. Я передаю данные не так?

Ваша проблема заключается в том, что вы помещаете в тело http запрос params, но в неправильном кодировании.

Попробуйте использовать этот код

 let paramToSend = ["username":user,"password":psw] request.setValue("application/json", forHTTPHeaderField: "Content-Type") request.httpBody = try! JSONSerialization.data(withJSONObject: parameters) 

вместо

 let paramToSend = "username=" + user + "&password=" + psw request.httpBody = paramToSend.data(using: String.Encoding.utf8) 

Протестировано с помощью веб-клиента http, это ответ

 { "accessToken": "t9iqu0pe8is3vmt2t7b1k90rpv", "userInfo": { "firstNames": "Consumer", "lastNames": "BeMobile", "claroClubPoints": 914, "imageProfileUrl": "http://162.209.99.39:8080/MiClaroBackend/myprofile/image/show/imageProfile.png" }, "mainProductService": { "idProductService": "51993112847", "lineType": 1, "name": "993 112 847", "alias": "TUN 20", "profileType": 1, "idAccount": "961851", "idReceipt": "961852", "category": 1, "clientType": 1 }, "userData": { "clientType": 1, "docType": "002", "docNum": "41313343", "email": "[email protected]", "msisdn": "995 456 679" }, "defaultServiceResponse": { "idTransaction": "2KHHVIC4SC00", "idResponse": 0, "message": "OK", "messageType": 0 } } 

Надеюсь это поможет

  • SWIFT - преобразовать строку в элемент UIKit
  • Сохранение и восстановление огней (HMCharacteristics)
  • Как сопоставить UnsafePointer с другим типом?
  • Swift Передача данных из appDelegate в другой класс
  • Преобразование строк в float в Swift Beta 5
  • Как изменить пароль PFUser в Swift?
  • Как получить символ валюты из кода валюты для всех доступных мест в Swift?
  • Нет экземпляра UICollectionViewLayoutAttributes для layoutAttributesForSupplementaryElementOfKind: UICollectionElementKindSectionHeader
  • Как открыть конкретный контроллер View из Today Widget?
  • Что должно произойти, когда необъявленный пользователь нажмет кнопку покупки восстановления в iOS?
  • Проблемы с 3D Touch и восстановление состояния
  • Давайте будем гением компьютера.