2016-11-08 49 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