尽管验证失败,但尝试序列化对象

Posted

技术标签:

【中文标题】尽管验证失败,但尝试序列化对象【英文标题】:Try to serialize Object although Validation fails 【发布时间】:2015-02-25 09:00:23 【问题描述】:

我使用 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 中再次验证响应,我该如何处理?

【问题讨论】:

【参考方案1】:

这是一个非常好的问题。

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

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

有趣的是,如果您返回一个序列化错误,但验证也失败了。在这种情况下,您的 completionHandler 实际上将使用 nil 对象和验证错误来调用,而不是序列化错误。如果验证在responseObject 之前运行,Alamofire 将验证错误优先于序列化错误。

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

【讨论】:

以上是关于尽管验证失败,但尝试序列化对象的主要内容,如果未能解决你的问题,请参考以下文章

WebAPI OData 验证失败未返回 ModelState 对象

表单验证器唯一用户名失败[重复]

更改密码后 Heroku CLI 中的身份验证失败

Laravel:当我添加所需的规则时,FormRequest 验证失败

尽管安装了根证书,但握手失败(PayPal 升级 - g5 证书 - openssl)

为啥 JWS 签名的验证失败?