首页 > 解决方案 > 如何使用 alamofire 在 HTTP 请求中发送 json

问题描述

我还在学习 Swift 编程,我已经成功使用 Alamofire 使用服务,但现在我面临以下问题,我有一个服务,我在 URL 中发送了 2 个 json,我真的不知道如何发送这些数据,我看过一些例子,但我仍然无法理解。已经配置了安全策略但是问题是一样的

这是我的网址{{url}}apps/Search2/{"search":"","user":14,"category":2,"numero":0,"subgroup":-1,"tipo": -1,"子类别":-1,"cantidad":0}/{"max":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

标签: jsonswiftalamofirealamofire-request

解决方案


找了几篇帖子后,我找到了我的问题的解决方案,因为我提到我需要的是在我的 URL 链中发送一个 json,应该注意它们不是参数,即使到现在我也不明白为什么我的问题被标记为重复。但解决方案是将我的变量菜单转换为参数类型,将其转换为字符串,然后简单地将其与 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
    }

我从这个链接获得了示例代码,他们有类似的问题


推荐阅读