使用Alamofire Swift3发送复杂参数会导致状态码500错误

时间:2017-04-25 19:04:08

标签: swift parameters swift3 alamofire

我对Alamofire和JSON事物的经验很少。我在互联网上搜索了很多,并在问这个问题之前尽力了,所以请理解我。

我正在尝试使用Alamofire以.put方法发送参数。

当我测试使用 PostMan(Chrome扩展程序)发送参数时,一切正常。

参数是这样的

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

"地址"是字符串,"电话"是字符串数组," emergency_phone"是   字典数组

我在swift3中声明了这个参数

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))

我收到该错误是因为我的参数是不可接受的类型? 如何以正确的方式发送该参数?

请帮我解决这个问题。谢谢。

2 个答案:

答案 0 :(得分: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))

答案 1 :(得分:0)

说实话,这里可能存在几个问题 - 错误500表明您的参数已到达服务器但却无法理解并崩溃。

你的参数对我来说似乎没问题。但我建议检查postman使用的标题,如"Content-Type" : "application/json"。尝试在代码中复制它们。可能会发生服务器需要此标头来确定其下一个操作,并且缺少此信息可能会导致失败。