Как отправить JSON в HTTP-запрос с alamofire - PullRequest
0 голосов
/ 10 июня 2019

Я все еще изучаю программирование в Swift, я успешно использовал сервисы с Alamofire, но теперь я столкнулся со следующей проблемой, у меня есть сервис, в который я отправил 2 json в URL, и я действительно не знаю, как отправить этоДанные я видел несколько примеров, но я до сих пор не могу понять.Уже настроили политику безопасности, но проблема та же

Это мой URL {{url}} apps / Search2 / {"search": "", "user": 14, "category": 2, "Numero": 0, "подгруппа": - 1, "типо": - 1, "подкатегорию": - 1, "cantidad": 0} / { "макс": 5000, "Minimo": 1}

и это то, что я пытался

static func loadMenuWithFilter(search : String, userId : Int, categoryId : Int ){
        let menu : Parameters  = ["search" : search, "user" : userId, "category" : categoryId, "numero" : 0, "subgroup" : -1, "tipo" : -1, "subcategory" : -1,"cantidad" : 0]
        Alamofire.request(AlamofireConstants.MENU_FILTER, method: .get, parameters: menu, encoding: JSONEncoding.default)
        .validate(statusCode: 200..<300).responseData { response in
            switch response.result {
            case .failure(let error):
                print("error ==> \(error)")
            case .success(let data):
                do{
                    let decoder = JSONDecoder()
                    decoder.keyDecodingStrategy = .convertFromSnakeCase
                    let result = try decoder.decode(Menu.self, from: data)
                    print("MenuController \(result)")

                } catch {
                    print("MenuController \(error)")
                }
            }
        }
    }

, очевидно, я не добился успеха, потому что я уверен, что это не правильный способ сделать это.Мой сервисный ответ 404

Ответы [ 2 ]

0 голосов
/ 13 июня 2019

После поиска в нескольких постах я нашел решение своей проблемы, так как упомянул, что мне нужно было отправить json в мою цепочку URL, следует отметить, что они не были параметрами, даже до сих пор я не понимаюпочему мой вопрос был помечен как дубликат.Но решение состояло в том, чтобы преобразовать мое переменное меню, имеющее тип Parameter, преобразовать его в строку, а затем просто объединить его с URL-адресом.Благодаря этому действию служба была успешно выполнена, и не нужно было выполнять все настройки, которые я указывал в комментариях, ни настройку в App Transport Security и не передавать мое переменное меню как Encoding.default.Ничего из этого не сработало.

Это было просто сделано

ConvertJson.jsonToString(json: menu as AnyObject)


class func jsonToString(json: AnyObject) -> String{
        var item : String!
        do {
            let data1 =  try JSONSerialization.data(withJSONObject: json, options: JSONSerialization.WritingOptions.prettyPrinted) // first of all convert json to the data
            let convertedString = String(data: data1, encoding: String.Encoding.utf8) // the data will be converted to the string
            item = convertedString!
        } catch let myJSONError {
            print(myJSONError)
        }
        return item
    }

Я получил пример кода по этой ссылке , где у них похожая проблема

0 голосов
/ 10 июня 2019

Попробуйте изменить JSONEncoding.default на URLEncoding.default?

...