【问题标题】:Getting null response using Alamofire使用 Alamofire 获得空响应
【发布时间】:2020-04-27 18:19:29
【问题描述】:
{
  "vUserList": [
    {
      "firstName": "Kate",
      "lastName": "Bell",
      "email": "katebell@mac.com"
    },
    {
      "lastName": "Higgins",
      "firstName": "Daniel",
      "email": "dhiggins@mac.com"
    },
    {
      "email": "JohnAppleseed@mac.com",
      "firstName": "John",
      "lastName": "Appleseed"
    },
    {
      "lastName": "Haro",
      "firstName": "Anna",
      "email": "annaharo@mac.com"
    },
    {
      "email": "hankzakroff@mac.com",
      "firstName": "Hank",
      "lastName": "Zakroff"
    }
  ]
}

这是我需要发送到服务器的请求参数。

func getContactsParameters() -> [String : Any] {
        return [Keys.vUserList : arrContacts]
    }

var headers = [
                Keys.XAPIKEY: "5dik8fo5yecc25bfcc562724dd674bde5fh5ju8y"
            ]

Alamofire.request("urlString", method: .post, parameters: getContactsParameters(), encoding: JSONEncoding.default, headers: headers).responseJSON { response in
                print(response)
}

getContactsParameters() 控制台日志如下, 作为回应,我的成功代码为 Null。

我与后端人员交谈过,他们说,如果我没有收到此密钥“vUserList”,那么您可能会得到空响应。但是,我仔细检查了拼写和所有内容。 另一种情况是,他们说如果我们没有在正确的 json 中收到请求,那么您可能会得到空响应。

我尝试了许多不同的解决方案,但都没有奏效。 :(

任何帮助表示赞赏!

这里附上邮递员截图。在邮递员中它工作正常。

【问题讨论】:

  • 你能显示你的getContactsParameters()返回什么
  • 也可以验证api使用的方法...是.get还是.post
  • 先用postman试试,看看得到的响应码。
  • 我认为您需要传递联系人数组的 JSON 字符串。您能否与后端人员交叉验证所需的格式?
  • @iOSArchitect.com 用 getContactsParameters() 返回更新了我的答案

标签: ios json swift alamofire


【解决方案1】:

尝试将联系人数组的 JSON 字符串对象传递到 API 参数中。

let arrOfUserList : [[String : AnyObject]] = [
            ["firstName":"Kate" as AnyObject,"lastName":"Bell" as AnyObject,"email":"katebell@mac.com" as AnyObject],
            ["firstName":"Daniel" as AnyObject,"lastName":"Higgins" as AnyObject,"email":"dhiggins@mac.com" as AnyObject]
        ]

do {
    let data = try JSONSerialization.data(withJSONObject: arrOfUserList, options: [])
    let jsonString = NSString(data: data, encoding: String.Encoding.utf8.rawValue)

     if jsonString != nil {

        let paramsContact = [Keys.vUserList : jsonString]

            //Do your API calling code here
     }
 } catch {
      print(error.localizedDescription)
 }

希望它对你有用。

【讨论】:

    【解决方案2】:

    检查你的邮递员后

    请在您的请求中添加标题

    let headers = [
        "Content-Type": "application/x-www-form-urlencoded"
    ]
    

    如果不行的话

    URLEncoding()URLEncoding.httpBodyURLEncoding.default 代替 JSONEncoding.default

    【讨论】:

    • 我尝试了上面的一个,并得到了这个响应。成功:{ 数据 = "";消息 = "";状态 = 1; }
    • @iGatiShah 你是否也添加了 URLEncoding.httpBody ?因为我认为您不需要像接受的答案中建议的那样手动进行解码
    • 是的,我也添加了!但是,它不起作用!
    猜你喜欢
    • 1970-01-01
    • 2018-12-22
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-13
    相关资源
    最近更新 更多