当Alamofire验证失败时如何解析响应数据

6
我正在使用的API有时会在请求失败时在响应体中发送错误消息。它位于response.data中。有时它是JSON格式,有时它是字符串。我正在使用validate方法,因此当发生错误时,result.valuenil
是否有一种方式可以让Alamofire将NSData序列化为字符串或将JSON序列化为[String: AnyObject],就像响应成功时那样?
我想继续使用validate方法。
编辑: 这里是我在Alamofire GitHub项目上发起的功能请求链接。 https://github.com/Alamofire/Alamofire/issues/1459
2个回答

6
目前还没有这个功能。实际上,我现在正在Alamofire 4中开发这个功能。在Alamofire 3中,如果遇到验证错误,您将不得不自己解析response.data。在Alamofire 4中,您将可以在验证时访问response.data,并能够自定义由验证生成的Error
最有可能的解决方案是,在验证中检查是否会出现错误(检查响应状态码和标头)。然后根据错误类型,您可以解析response.data以从服务器提取错误消息,并从验证中引发一个非常具体的错误。这很可能是新系统允许的方式。这样,您就可以在验证中识别OAuth2访问令牌错误,并抛出自定义的错误,而不必使用复杂的响应序列化程序来完成。

谢谢!我可能会提出一个功能请求,使得在验证失败时请求数据使用序列化程序变得更加容易。 - Tobias

2

Swift 4

如果出现错误,您可以尝试将响应数据解析为字符串或json格式。

import Alamofire
import SwiftyJSON

Alamofire.request("http://domain/endpoint", method: .get, parameters: nil, encoding: JSONEncoding.default, headers: nil)
    .validate()
    .responseJSON(completionHandler: { response in
        if let error = response.error {
            if let data = response.data {
                if let errorString = String(bytes: data, encoding: .utf8) {
                    print("Error string from server: \(errorString)")
                } else {
                    print("Error json from server: \(JSON(data))")
                }
            } else {
                print("Error message from Alamofire: \(error.localizedDescription)")
            }

        } 
        guard let data = response.result.value else {
            print("Unable to parse response data")
            return
        }
        print("JSON from server: \(JSON(data))")
    })

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接