gpt4 book ai didi

json - 使用 Alamofire 和 Codable 进行放置请求

转载 作者:搜寻专家 更新时间:2023-10-30 22:23:55 25 4
gpt4 key购买 nike

我有一个简单的放置请求,我正在使用 Alamofire 的 Parameters 类型将数据发送到服务器。我想使用可编码的。如何将我的可编码结构转换为参数或重新配置 Alamofire 请求以将 JSON 对象作为参数?使用 Alamofire 发送 post 和 put 请求的最佳和最有效的方式是什么?

这就是我现在使用 Alamofire 所做的事情。

func addProduct(product:MainProduct, completionHandler:@escaping ((JSON?, Error?)->Void)) {

let url = "INSERT_URL"

let headers: HTTPHeaders = [
"Content-Type": "application/json"
]

var parameters:Parameters = [:]
parameters["orderId"] = product.orderId
parameters["orderSize"] = product.orderSize
parameters["theOrderStatus"] = product.orderStatus
let purchDate = Int((product.purchaseDate.timeIntervalSince1970)*1000)
parameters["purchaseDate"] = purchDate
parameters["archived"] = false

Alamofire.request(url, method:.put, parameters: parameters, encoding: JSONEncoding.default, headers:headers).responseJSON {response in
switch response.result {
case .success(let value):
print ("finish")
let swiftyJson = JSON(value)
completionHandler(swiftyJson, nil)
case .failure(let error):
completionHandler(nil, error)
}
}
}

这是我们的结构。

struct MainProduct:Codable{

var purchaseDate:Date
var orderId:String
var orderSize:Double
var orderStatus:OrderStatus?

var archived:Bool

private enum CodingKeys: String, CodingKey {
case purchaseDate
case orderId
case orderSize
case orderStatus = "theOrderStatus"
case archived
}
}

最佳答案

您可以创建一个新的 URLRequest 并将 httpBody 设置为您编码的 jsonData。试试这个代码...

func addProduct(product: MainProduct, completionHandler: @escaping ((JSON?, Error?)->Void)) {

let encoder = JSONEncoder()
let jsonData = try! encoder.encode(product)

let url = "INSERT_URL"

var request = URLRequest(url: url)
request.httpMethod = HTTPMethod.put.rawValue
request.setValue("application/json; charset=UTF-8", forHTTPHeaderField: "Content-Type")
request.httpBody = jsonData

Alamofire.request(request).responseJSON { response in
switch response.result {
case .success(let value):
print ("finish")
let swiftyJson = JSON(value)
completionHandler(swiftyJson, nil)
case .failure(let error):
completionHandler(nil, error)
}
}
}

关于json - 使用 Alamofire 和 Codable 进行放置请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47685241/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com