J'essaie de faire une demande de publication avec un corps en rapide en utilisant Alamofire.
mon corps json ressemble à:
{
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List":[
{
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
},
{
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
}
]
}
let
list
J'essaye de faire avec NSDictionnary qui ressemble à:
[[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]]
et ma demande utilisant Alamofire ressemble à:
Alamofire.request(.POST, "http://myserver.com", parameters: ["IdQuiz":"102","IdUser":"iOSclient","User":"iOSClient","List":list ], encoding: .JSON)
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
La demande a une erreur et je pense que le problème vient de la liste des dictionnaires, car si je fais une demande sans la liste, cela fonctionne bien, alors une idée?
J'ai essayé la solution proposée mais je suis confronté au même problème:
let json = ["List":list,"IdQuiz":"102","IdUser":"iOSclient","UserInformation":"iOSClient"]
let data = NSJSONSerialization.dataWithJSONObject(json, options: NSJSONWritingOptions.PrettyPrinted,error:nil)
let jsons = NSString(data: data!, encoding: NSUTF8StringEncoding)
Alamofire.request(.POST, "http://myserver.com", parameters: [:], encoding: .Custom({
(convertible, params) in
var mutableRequest = convertible.URLRequest.copy() as! NSMutableURLRequest
mutableRequest.HTTPBody = jsons!.dataUsingEncoding(NSUTF8StringEncoding, allowLossyConversion: false)
return (mutableRequest, nil)
}))
.response { request, response, data, error in
let dataString = NSString(data: data!, encoding:NSUTF8StringEncoding)
println(dataString)
}
Réponses:
Tu es proche. Le formatage du dictionnaire de paramètres ne semble pas correct. Vous devriez essayer ce qui suit:
J'espère que cela a résolu votre problème. Si ce n'est pas le cas, répondez et j'ajusterai ma réponse en conséquence.
la source
nil
àAnyObject
?Si vous utilisez Alamofire v4.0 +, la réponse acceptée ressemblerait à ceci:
la source
JSONEncoding
lever l'ambiguïté du type qui l'a fait pour moi.Je n'aime aucune des autres réponses jusqu'à présent (sauf peut-être celle de SwiftDeveloper), car elles vous obligent soit à désérialiser votre JSON, uniquement pour qu'il soit à nouveau sérialisé, soit à se soucier de la structure du JSON lui-même.
La bonne réponse a été publiée par afrodev dans une autre question. Vous devriez aller voter pour.
Voici juste mon adaptation, avec quelques changements mineurs (principalement un jeu de caractères UTF-8 explicite).
la source
toJSONString
n'est pas une méthode native, c'est donc essentiellement une boîte noire que vous devez implémenter. Deuxièmement, la réponse que vous donnez, fournit un varjson
qui commence comme une chaîne json, en réalité personne n'a les paramètres de cette façon, à moins que vous ne les convertissiez et ne les stockiez localement de cette façon.toJSONString
de réponse dans ma réponse, 2) "en réalité, personne n'a les paramètres de cette façon" - cela fait beaucoup d'hypothèses; le JSON peut provenir de parties assez différentes de l'application, sans aucun rapport avec la demande, et dont le code réseau ne sait rien.Xcode 8.X, Swift 3.X
Utilisation facile;
la source
Si vous utilisez
swift4
et queAlamofire v4.0
le code accepté ressemblerait à ceci:la source
Réponse acceptée dans Xcode 11 - Swift 5 - Alamofire 5.0
la source
J'ai légèrement modifié la réponse de SwiftDeveloper , car cela ne fonctionnait pas pour moi. J'ai également ajouté la validation Alamofire.
la source
Il y a quelques changements que je voudrais notifier. Vous pouvez désormais accéder à la requête, au JSON, à l'erreur à partir de l'objet de réponse.
la source
la source
Voici comment j'ai créé une requête Http POST avec swift qui nécessite des paramètres avec un encodage Json et avec des en-têtes.
Création du client API BKCAPIClient en tant qu'instance partagée qui inclura tous les types de requêtes telles que POST, GET, PUT, DELETE, etc.
Classe Operation créée qui contient toutes les données nécessaires pour une demande particulière et contient également une logique d'analyse à l'intérieur du bloc d'achèvement.
Appeler l'API dans n'importe quel contrôleur de vue où nous avons besoin de ces données
la source
la source
Si quelqu'un se demande comment procéder avec les modèles et autres choses, voir ci-dessous
la source
Alamofire ~ 5.2 et Swift 5
Vous pouvez structurer vos données de paramètres
Travailler avec de fausses API JSON
la source