2016-11-08 90 views
1

这个问题更多的是斯威夫特&和字典比Alamofire本身格式字典Alamofire

我需要通过一个Web服务创建一个记录,而我使用Alamofire。出于某种原因,我比期望太多的报价与web服务拒绝我的电话

如果我通过卷曲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调用我的应用程序中, 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"} 

正如你可以看到每个数字都有自己的报价缠(例如,“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是双

+0

请将而试图以执行web服务,你所得到的错误消息。 –

+0

错误消息是:此方法不适用于此集合。这不是真的有用。因此,我在webservice的生产日志(ssh test @ site tail -f shared/log/production.log)上做了一个尾巴,在那里我可以看到,使用Curl它发送的时候没有引用int/doubles和Swift/Alamofire引号 – Glenn

+0

对不起,您需要将它们转换为NSNumber,然后尝试发送它。 –

回答

2

正如我需要的编码添加到请求的注释说明。要关闭这个问题,并表现出更友好的格式化的解决了这个答案:

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() { 
+0

此编码还允许您在rails服务器上正确解析'request.raw_post'上的ruby。在这里拯救了我的生命! – Mizmor