2016-11-08 5 views
1

のためにこの質問は、私は、Webサービス経由でレコードを作成する必要がAlamofire自体フォーマット辞書はAlamofire

よりスウィフト&と辞書についての詳細である、と私は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"} 

を、私は私のアプリでAlamofireを経由して通話を行う場合、私は希望とWebServiceが私のコール

を拒否し、私はカールを経由して通話をシミュレートした場合、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"} 

あなたはそれぞれ番号がWebサービスを反転させ、自身の周りに包まれた引用符(例えば「99.5」99.5対を持って見ることができるように

。私は周りを微調整しましたが、Swiftでこれを修正する方法を見つけることはできません。私はAlamofireのための私のペイロードを作成した方法がある:変数がlineDescriptionとlineSpecificationsは、文字列とfeePriceある

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 
} 

私はリクエストにエンコーディングを追加するために必要なコメントで述べたようにダブル

+0

Webサービスを実行しようとしているときに、あなたが得ているエラーメッセージを送ってください。 –

+0

エラーメッセージは次のとおりです。このコレクションではメソッドが許可されていません。これは本当に役に立たない。だから、Webサービスのプロダクションログ(ssh test @ site tail -f shared/log/production.log)で、Curlでint/doubleとSwift/Alamofireの引用符をつけずに引用符をつけて送信していることが分かりました – Glenn

+0

申し訳ありませんが、NSNumberに変換してから送信してください。 [ "量":1のNSNumberとして、 "UNIT_PRICE" のNSNumberとしてfeePrice、 "SALE_PRICE" のNSNumberとしてfeePrice、 "vat_percentage":21のNSNumber よう] しかし、それはdoesnの私が "LINE_ITEM" を試み –

答えて

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

このエンコーディングはまた、 'request.raw_post'をRuby on Railsサーバで正しく解析することを可能にします。ここに私の人生を保存しました! – Mizmor