尽管验证失败,但尝试序列化对象
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
序列化程序不会收到有关验证错误的通知。它只接收request
、response
和data
对象,需要尝试从数据中构造object
。
您发布的ResponseObjectSerializable 链接正是这样做的。如果序列化成功,它将返回一个有效的对象。如果失败,将返回一个 nil 对象和一个序列化错误。
有趣的是,如果您返回一个序列化错误,但验证也失败了。在这种情况下,您的 completionHandler
实际上将使用 nil 对象和验证错误来调用,而不是序列化错误。如果验证在responseObject
之前运行,Alamofire 将验证错误优先于序列化错误。
作为旁注,您的
responseObject
序列化程序应该安全地处理从服务器返回的数据,而不管返回的状态代码如何。如果解析数据失败,您的序列化程序应该返回一个序列化错误。如果成功,则返回对象。
【讨论】:
以上是关于尽管验证失败,但尝试序列化对象的主要内容,如果未能解决你的问题,请参考以下文章
WebAPI OData 验证失败未返回 ModelState 对象
Laravel:当我添加所需的规则时,FormRequest 验证失败