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 中的代码,以识别这是哪种错误。在以下示例中,如果状态代码是 400
在 case .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 方法没有得到正确的响应,结果是失败 [关闭]
swift 3 alamofire - 获取请求给出响应序列化失败
Alamofire 类型的表达式在没有更多上下文的情况下是模棱两可的