Estou tentando fazer um post request com um corpo em swift usando Alamofire.
meu corpo json se parece com:
{
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List":[
{
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
},
{
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
}
]
}
Estou tentando fazer let
list
com que NSDictionnary se pareça com:
[[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]]
e minha solicitação usando Alamofire se parece com:
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)
}
A solicitação tem um erro e acredito que o problema seja com a lista do Dicionário, pois se eu fizer uma solicitação sem a lista funciona bem, então alguma ideia?
Tentei a solução sugerida, mas estou enfrentando o mesmo problema:
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)
}
Respostas:
Você está perto. A formatação do dicionário de parâmetros não parece correta. Você deve tentar o seguinte:
Esperançosamente, isso resolveu seu problema. Se isso não acontecer, responda e ajustarei minha resposta de acordo.
fonte
nil
aAnyObject
?Se você estiver usando o Alamofire v4.0 +, a resposta aceita seria esta:
fonte
JSONEncoding
para desambiguar o tipo que fez isso por mim.Eu não gosto de nenhuma das outras respostas até agora (exceto talvez aquela por SwiftDeveloper), porque quer exigir que você desserializar seu JSON, apenas para que ele seja serializado novamente, ou se preocupam com a estrutura do próprio JSON.
A resposta correta foi postada por afrodev em outra pergunta. Você deve ir e votar positivamente.
Abaixo está apenas a minha adaptação, com algumas pequenas alterações (principalmente conjunto de caracteres UTF-8 explícito).
fonte
toJSONString
não é um método nativo, então é basicamente uma caixa preta que você tem que implementar. Dois, a resposta que você dá fornece uma varjson
que começa como uma string json, realisticamente, ninguém tem os parâmetros dessa forma, a menos que você os esteja convertendo e armazenando localmente dessa forma.toJSONString
na minha resposta, 2) "realisticamente, ninguém tem os parâmetros dessa maneira" - isso é fazer muitas suposições; o JSON pode estar vindo de partes bem diferentes do aplicativo, não relacionadas a fazer a solicitação e sobre as quais o código de rede não sabe nada.Xcode 8.X, Swift 3.X
Uso fácil;
fonte
Se você estiver usando o
swift4
eAlamofire v4.0
o código aceito será parecido com este:fonte
Resposta aceita no Xcode 11 - Swift 5 - Alamofire 5.0
fonte
Eu editei ligeiramente a resposta do SwiftDeveloper , porque não estava funcionando para mim. Eu adicionei a validação Alamofire também.
fonte
Existem algumas mudanças que eu gostaria de notificar. Você pode acessar a solicitação, JSON, erro do objeto de resposta a partir de agora.
fonte
fonte
Aqui está como criei uma solicitação Http POST com swift que precisa de parâmetros com codificação Json e com cabeçalhos.
Cliente API criado BKCAPIClient como uma instância compartilhada que incluirá todos os tipos de solicitações, como POST, GET, PUT, DELETE etc.
Classe de operação criada que contém todos os dados necessários para uma solicitação específica e também contém lógica de análise dentro do bloco de conclusão.
Call API em qualquer View Controller onde precisamos desses dados
fonte
fonte
Se alguém está se perguntando como proceder com modelos e outras coisas, veja abaixo
fonte
Alamofire ~ 5.2 e Swift 5
Você pode estruturar seus dados de parâmetro
Trabalhar com API json falsa
fonte