虽然验证失败,但尝试序列化对象

时间:2015-02-25 09:00:24

标签: swift alamofire

我使用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>

1 个答案:

答案 0 :(得分:2)

这是一个非常好的问题。

长话短说,你不能。您的responseObject序列化程序未收到有关验证错误的通知。它只接收requestresponsedata个对象,需要尝试从数据中构造object

您发布的ResponseObjectSerializable链接就是这样做的。如果序列化成功,它将返回一个有效的对象。如果失败,它将返回一个nil对象和一个序列化错误。

如果您感兴趣的话,如果您返回序列化错误,但验证也失败了。在这种情况下,实际上将使用nil对象调用completionHandler,并且验证错误,而不是序列化错误。如果验证在responseObject之前运行,Alamofire会对验证错误进行优先级排序。

  

作为旁注,您的responseObject序列化程序应该安全地处理从服务器返回的数据,而不管返回的状态代码如何。如果解析数据失败,则序列化程序应返回序列化错误。如果成功,则返回对象。