Alamofire:有没有办法在失败的情况下获取响应数据?

Posted

技术标签:

【中文标题】Alamofire:有没有办法在失败的情况下获取响应数据?【英文标题】:Alamofire: Is there a way to get response data in case of Failure? 【发布时间】:2016-12-10 21:36:35 【问题描述】:

Alamofire 中调用.validate() 进行自动验证并将状态码200...299 传递为成功。

如果 API 请求失败,服务器会发送状态码 400 以及一些内部错误消息和 JSON 中的代码,以识别这是哪种错误。在以下示例中,如果状态代码是 400case .Failure 下,我找不到获取此 JSON 数据的方法:

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"])
         .validate()
         .responseJSON  response in
             switch response.result 
             case .Success:
                 print("Validation Successful")
             case .Failure(let error):
                 print(error)
             
         

error 不包含响应数据。有什么办法得到吗?

【问题讨论】:

嗯.. 有趣的是,我遇到了一个类似的问题,在该问题之前,服务器没有使用传统方式实现,我必须自己手动验证,问题是即使是错误也可能在返回的 JSON 中有关于错误的数据,在这种情况下,错误可能为空 @VictorSigler 服务器实现正确。示例:假设它是登录请求。如果用户已登录,则 statusCode 为 200,但如果用户未登录,则 statusCode 为 400,其中 JSON 响应解释了用户未登录的原因(密码无效、帐户过期等) 是的正是我上面所说的,在这种情况下,我担心你不能使用Alamofire的validate(),你应该尝试在响应中使用statusCode并尝试像我过去为这个疯狂的 API 所做的过滤案例:) 请在此处查看答案***.com/a/35324741/5093900 【参考方案1】:

如果有错误从服务器返回的json数据,你应该可以从响应对象中获取它,比如:

print(response.result)   // result of response serialization

if let JSON = response.result.value 
    print("JSON: \(JSON)")

你也可以继承 Alamofire 返回的 ErrorType 对象:

public enum BackendError: ErrorType 
    case Network(error: NSError)
    case DataSerialization(reason: String)
    case JSONSerialization(error: NSError)
    case ObjectSerialization(reason: String)
    case XMLSerialization(error: NSError)

如果您不想构造自定义错误对象以返回,这将为您提供有关错误的更多信息。更多信息来自 Alamofire 文档:https://github.com/Alamofire/Alamofire#handling-errors

【讨论】:

以上是关于Alamofire:有没有办法在失败的情况下获取响应数据?的主要内容,如果未能解决你的问题,请参考以下文章

使用 alamofire 的 post 方法没有得到正确的响应,结果是失败 [关闭]

请求失败时从 AlamoFire 获取 JSON 响应

swift 3 alamofire - 获取请求给出响应序列化失败

Alamofire 类型的表达式在没有更多上下文的情况下是模棱两可的

有没有办法在不让用户安装 Google Gears 的情况下获取用户的位置?

有没有办法在没有参数的情况下在其函数中获取数组结构的索引?