我使用ResponseObjectSerializable,如下所述: https://github.com/Alamofire/Alamofire#generic-response-object-serialization
我想验证状态代码是否在一个范围内 https://github.com/Alamofire/Alamofire#validation
我的电话如下:
Alamofire.request(Router.Something())
.validate(statusCode: 200..<300)
.responseObject { (request, response, object:Object?, error) in
println(object)
println(request)
println(response)
}
我的问题是,如果验证失败,无论如何都会调用responseObject并尝试序列化空响应。 如何在不在ResponseObjectSerializable中第二次验证响应的情况下处理它?</ p>
答案 0 :(得分:2)
这是一个非常好的问题。
长话短说,你不能。您的responseObject
序列化程序未收到有关验证错误的通知。它只接收request
,response
和data
个对象,需要尝试从数据中构造object
。
您发布的ResponseObjectSerializable链接就是这样做的。如果序列化成功,它将返回一个有效的对象。如果失败,它将返回一个nil对象和一个序列化错误。
如果您感兴趣的话,如果您返回序列化错误,但验证也失败了。在这种情况下,实际上将使用nil对象调用completionHandler
,并且验证错误,而不是序列化错误。如果验证在responseObject
之前运行,Alamofire会对验证错误进行优先级排序。
作为旁注,您的
responseObject
序列化程序应该安全地处理从服务器返回的数据,而不管返回的状态代码如何。如果解析数据失败,则序列化程序应返回序列化错误。如果成功,则返回对象。