Я пытаюсь выполнить простой запрос POST в swift. Я хотел бы разместить массив объектов (аварийных сигналов), и я постоянно сталкиваюсь с проблемами. Вот то, что я до сих пор:Запрос JSON POST с Alamofire и EVReflection
func submitAlarms(alarms: [Alarm],onCompletion: @escaping ([Alarm]) -> Void){
let route = baseURL
let token = SessionManager().storedSession!.token.idToken
let headers = [
"Authorization": "Bearer \(token)"
]
let parameters = [
"alarms": alarms.toJsonString()]
print("Parameters ", parameters)
Alamofire.request(route, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: headers)
.validate()
.responseJSON{ response in
switch response.result{
case .failure(let error):
print("POST Alarm JSON Error: \(error)")
case .success(let value):
let json = JSON(value)
let alarms_json = json["alarms"]
print(alarms_json)
let alarms_string = alarms_json.rawString()
let alarms: [Alarm] = [Alarm](json: alarms_string)
//let alarms = [Alarm](json: res_string)
onCompletion(alarms)
}
}
}
я "м в основном возникают проблемы с parameters
части по какой причине, Alamofire не может взять массив объектов, поэтому я создал словарь с вершиной. . уровень alarm
ключа, который содержит массив тревог затем я использую EVReflection конвертировать мой массив тревоги в строку JSON Но это преобразование дает мне это:.
Parameters ["alarms": "[\n{\n \"isActive\" : true,\n \"volume\" : 10,\n \"minute\" : 15,\n \"days\" : [\n 0,\n 1,\n 2,\n 3,\n 4,\n 5,\n 6\n ],\n \"brightness\" : 10,\n \"hour\" : 6,\n \"audio\" : 4,\n \"duration\" : 1,\n \"label\" : \"Alarm\",\n \"allowSnooze\" : false,\n \"isSynchronized\" : false\n}\n]"]
Где все это дополнительные \
и \n
приходят с помощью? Alamofire, сервер отвечает 400, потому что эти дополнительные части делают его недействительным id JSON. Что мне здесь не хватает? Я использую Xcode 8/Swift 3 с последними версиями Alamofire и EVReflection. Я рассмотрел другие примеры, но они в основном устарели. Многие из них также используют расширения и настраиваемую кодировку, что кажется смешным для такого простого запроса. Оцените любую помощь и бонусные баллы, если вы можете очистить ответ как . хорошо
Да, я согласен с тем, что моя проблема заключается в том, что я создаю словарь с одним элементом и одной строкой json, тогда как я действительно хочу, это полный словарь, содержащий массив объектов тревоги. Оттуда я считаю, что Alamofire правильно закодирует это в json. В toDictionary мне дали некоторые действительно странные результаты, но я не потратил на это много времени. Кстати, я уже делаю запрос POST, см. Выше. Я проверю ссылку, спасибо – 7200rpm
, затем убедитесь, что вы не добавляете словарь в этот словарь. Просто сделайте .toDictionary() и поместите это в параметры. –