2017-04-25 33 views
0

我對Alamofire和JSON事物的經驗很少。我在網上搜了很多,在問這個問題之前盡力而爲,所以請理解我。發送複雜參數與Alamofire Swift3獲取狀態代碼500錯誤

我想發送一個參數與.put方法使用Alamofire。

當我測試發送參數與PostMan(Chrome擴展),一切都很好。

的參數是這樣

update_values : {"address":"Sanchaung", "phone":["095567890", "094272732"], "emergency_phone":[{"name":"someone", "phone":"3454234"},{"name":"sometwo", "phone":"3454234"}]} 

「地址」 是字符串, 「電話」 是字符串的數組, 「emergency_phone」 是 陣列字典

的我聲明參數in swift3 like this

let ep : NSDictionary = [ 
      "name" : "someone", 
      "phone" : "12345" 
     ] 

let uv : NSDictionary = [ 
      "address" : "Sanchaung", 
      "phone" : ["123","1234"], 
      "emergency_phone" : [ep,ep] 
     ] 

let parameters = [ 
      "update_values" : uv 
     ] 

然後發送它與Alamofire這樣

Alamofire.request("http://myLink.com/api/employees/10?auth_token=\(vc.userInform.auth_token)", method: .put, parameters: parameters, encoding: JSONEncoding.default, headers: nil) 
      .validate() 
      .responseJSON { response in 
       switch(response.result) 
       { 
      case .success(let JSON) : 

      case .failure(let error) : 

       print(" UPDATING ERROR IS \(error)") 
      } 
    } 

然後我收到的狀態碼500錯誤

UPDATING ERROR IS responseValidationFailed(Alamofire.AFError.ResponseValidationFailureReason.unacceptableStatusCode(500)) 

我收到的錯誤,因爲我的參數是不能接受的類型? 如何以正確的方式發送該參數?

請幫我解決這個問題。謝謝。

回答

1

使用

let ep: [String: Any] = [ 
     "name" : "someone", 
     "phone" : "12345" 
    ] 

    let uv: [String: Any] = [ 
     "address" : "Sanchaung", 
     "phone" : ["123","1234"], 
     "emergency_phone" : [ep,ep] 
    ] 

    let parameters = [ 
     "update_values" : uv 
    ] 

,而不是你的代碼。

您可以使用JSON序列化的結果進行比較:

let data = try? JSONSerialization.data(withJSONObject: parameters, options: .prettyPrinted) 

    print(String(data: data!, encoding: .utf8)) 
+0

謝謝你的回答,但它仍然不起作用。我打印了JSNSerialization'json serializationOptional(「{\ n \」update_values \「:{\ n \」phone \「:[\ n \」123 \「,\ n \」1234 \「\ n] 「emergency_phone \」:[\ n {\ n \「phone \」:\「12345 \」,\ n \「name \」:\「someone \」\ n},\ n {\ n \「phone \」 :\「12345 \」,\ n \「name \」:\「someone \」\ n} \ n],\ n \「address \」:\「Sanchaung \」\ n} \ n}「)'但我不知道我能通過比較結果來達到什麼目的。 –

+0

好的,包含您的授權令牌空間字符? –

+0

我序列化的紫外線,它的工作。非常感謝你 –

0

說實話,這裏可能有幾個問題 - 錯誤500表明你的參數到達了服務器,但它不理解它們並且崩潰。

你的參數對我來說似乎沒問題。但我建議檢查郵遞員使用的標題,如"Content-Type" : "application/json"。嘗試在你的代碼中複製它們。有可能服務器需要這個頭來確定它的下一個動作,並且缺少這個信息可能會導致失敗。

+0

謝謝您的回答。我添加了這行'.validate(contentType:[「application/json」])'但仍然收到狀態碼500錯誤。 –

+0

也許嘗試添加它作爲標題,而不是零,你會發送'headers:[「Content-Type」:「application/json」]'。 '.validate'函數確保'response'具有這種內容類型,而我們試圖將內容類型添加到'request'本身 –

+0

謝謝。我添加了頭文件:'[「Content-Type」:「application/json」]'但仍然不吉利。 –