Próbuję szybko wysłać prośbę o wpis z ciałem za pomocą Alamofire.
moje ciało json wygląda tak:
{
"IdQuiz" : 102,
"IdUser" : "iosclient",
"User" : "iosclient",
"List":[
{
"IdQuestion" : 5,
"IdProposition": 2,
"Time" : 32
},
{
"IdQuestion" : 4,
"IdProposition": 3,
"Time" : 9
}
]
}
Próbuję zrobić let
list
z NSDictionnary, które wygląda następująco:
[[Time: 30, IdQuestion: 6510, idProposition: 10], [Time: 30, IdQuestion: 8284, idProposition: 10]]
a moja prośba z Alamofire wygląda następująco:
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)
}
Żądanie zawiera błąd i uważam, że problem dotyczy listy słowników, ponieważ jeśli wyślę żądanie bez listy, działa dobrze, więc masz jakiś pomysł?
Wypróbowałem sugerowane rozwiązanie, ale mam ten sam problem:
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)
}
Odpowiedzi:
Jesteś blisko. Formatowanie słownika parametrów nie wygląda poprawnie. Powinieneś spróbować następujących rzeczy:
Mam nadzieję, że to rozwiązało problem. Jeśli tak się nie stanie, proszę o odpowiedź, a ja odpowiednio dostosuję moją odpowiedź.
źródło
nil
doAnyObject
?Jeśli używasz Alamofire v4.0 +, to zaakceptowana odpowiedź wyglądałaby następująco:
źródło
JSONEncoding
aby ujednoznacznić typ, który zrobił to za mnie.Nie lubię którykolwiek z pozostałych odpowiedzi tak daleko (może z wyjątkiem jednego przez SwiftDeveloper), ponieważ albo wymagają deserializowania swoją JSON, tylko na to, aby zostać ponownie w odcinkach lub troska o strukturze samego JSON.
Prawidłowa odpowiedź została zamieszczona przez afrodiewa w innym pytaniu. Powinieneś iść i zagłosować.
Poniżej znajduje się tylko moja adaptacja, z drobnymi zmianami (głównie jawny zestaw znaków UTF-8).
źródło
toJSONString
nie jest metodą natywną, więc jest to w zasadzie czarna skrzynka, którą musisz zaimplementować. Po drugie, odpowiedź, którą udzielisz, dostarcza zmiennej,json
która zaczyna się jako łańcuch json, realistycznie nikt nie ma parametrów w ten sposób, chyba że konwertujesz i przechowujesz je lokalnie w ten sposób.toJSONString
w mojej odpowiedzi nie ma, 2) „realistycznie nikt nie ma takich parametrów” - to wiele założeń; JSON może pochodzić z całkiem różnych części aplikacji, w ogóle niezwiązanych z wysyłaniem żądania, io których nic nie wie kod sieciowy.Xcode 8.X, Swift 3.X
Łatwa obsługa;
źródło
Jeśli używasz,
swift4
aAlamofire v4.0
akceptowany kod będzie wyglądał następująco:źródło
Zaakceptowana odpowiedź w Xcode 11 - Swift 5 - Alamofire 5.0
źródło
Lekko zredagowałem odpowiedź SwiftDeveloper , ponieważ nie działała dla mnie. Dodałem również walidację Alamofire.
źródło
Jest kilka zmian, o których chciałbym powiadomić. Od teraz możesz uzyskać dostęp do żądania, JSON, błędu z obiektu odpowiedzi.
źródło
źródło
Oto jak utworzyłem żądanie Http POST ze swiftem, które wymaga parametrów z kodowaniem Json i nagłówkami.
Utworzono klienta API BKCAPIClient jako współdzieloną instancję, która będzie zawierać wszystkie typy żądań, takie jak POST, GET, PUT, DELETE itp.
Utworzono klasę Operation, która zawiera wszystkie dane potrzebne do konkretnego żądania, a także zawiera logikę parsowania wewnątrz bloku uzupełniania.
Wywołaj API w dowolnym kontrolerze widoku, w którym potrzebujemy tych danych
źródło
źródło
Jeśli ktoś zastanawia się, jak postępować z modelami i innymi rzeczami, zobacz poniżej
źródło
Alamofire ~ 5.2 oraz Swift 5
Możesz ustrukturyzować dane parametrów
Pracuj z fałszywym interfejsem API JSON
źródło