如何使用 alamofire 在 HTTP 请求中发送 json

Posted

技术标签:

【中文标题】如何使用 alamofire 在 HTTP 请求中发送 json【英文标题】:How to send json in HTTP request with alamofire 【发布时间】:2019-06-10 18:06:20 【问题描述】:

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

这是我的网址 urlapps/Search2/"search":"","user":14,"category":2,"numero":0,"subgroup":- 1,"tipo":-1,"subcategory":-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

【问题讨论】:

您遇到了什么错误? 这似乎没问题,但这实际上取决于您遇到的错误。因为它可能是很多事情——错误的 url、不正确的方法(发布?)、不正确的参数键、服务器不可用等。 The resource could not be loaded because the App Transport Security policy requires the use of a secure connection的可能重复 @onnoweb 我认为 POST 会很明显。该评论现在不允许我编辑它。 @Lirik 确实。我说的是在 GET 请求中发送一个正文。不支持。 【参考方案1】:

在找了几篇帖子后,我找到了解决我问题的方法,因为我提到我需要在我的URL链中发送一个json,需要注意的是它们不是参数,直到现在我都不明白为什么我的问题被标记为重复。但解决方案是转换我的参数类型的变量菜单,将其转换为字符串,然后简单地将其与 URL 连接起来。通过此操作,服务已成功执行,无需执行我在 cmets 中指示的所有设置,也无需执行 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
    

我从link 得到了示例代码,他们有类似的问题

【讨论】:

【参考方案2】:

尝试将JSONEncoding.default 更改为URLEncoding.default

【讨论】:

以上是关于如何使用 alamofire 在 HTTP 请求中发送 json的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 alamofire 实现 put http 请求

如何向 Alamofire 请求添加参数

如何从方法返回 alamofire Http 请求的结果?

如何使用 Alamofire 发送带有压缩内容的 HTTP POST 请求?

使用 Alamofire 的 Http 请求

在操场上使用 Alamofire 发出 http 请求的延迟