这个问题更多的是关于 Swift & 和字典而不是 Alamofire 本身
我需要通过网络服务创建记录,我使用的是 Alamofire。出于某种原因,我的报价比预期的要多,网络服务拒绝了我的电话
如果我通过 curl 模拟调用,web 服务接收:
{"records"=>[{"id"=>"2", "node"=>{"children"=>[{"specifications"=>"Specs", "description"=>"Fee", "line_item"=>{"sale_price"=>123.4,
"amount"=>1, "vat_percentage"=>21, "unit_price"=>99.5}}]}}], "action"=>"create", "collection"=>"invoices", "controller"=>"api/v2/api"}
如果我在我的应用程序中通过 Alamofire 进行调用,网络服务会收到:
{"records"=>[{"id"=>"2", "node"=>{"children"=>[{"specifications"=>"Specs", "description"=>"Fee", "line_item"=>{"sale_price"=>"123.4",
"amount"=>"1", "vat_percentage"=>"21", "unit_price"=>"99.5"}}]}}], "action"=>"create", "collection"=>"invoices", "controller"=>"api/v2/api"}
如您所见,每个数字都用引号括起来(例如,“99.5”与 99.5,导致网络服务翻转。
我调整了一下,但找不到如何在 Swift 中解决这个问题。我为 Alamofire 创建负载的方式是:
let jsonObject: [String: AnyObject] = [
"id": id as AnyObject,
"node" : [
"children": [[
"description" : lineDescription,
"specifications" : lineSpecifications,
"line_item" : [
"amount" : 1,
"unit_price" : feePrice,
"sale_price" : feePrice,
"vat_percentage" : 21
]
]] as AnyObject
] as AnyObject
]
let parameters = ["records" : [jsonObject as AnyObject]]
Alamofire.request(urlPath, method: .post, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseString() {
response in switch (response.result) {
blah blah
}
其中变量 lineDescription 和 lineSpecifications 是字符串,feePrice 是 Double
最佳答案
如评论中所述,我需要为请求添加编码。要关闭问题并显示格式更友好的解决方案,请使用此答案:
Alamofire.request(urlPath, method: .post, parameters: parameters, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseString() {
应该是:
Alamofire.request(urlPath, method: .post, parameters: parameters, encoding: JSONEncoding.default, headers: ["X-API-KEY": apiKey, "Content-type application":"json", "Accept application" : "json"]).responseString() {
关于swift - Alamofire 的格式化字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40489642/