如何使用 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的主要内容,如果未能解决你的问题,请参考以下文章