【发布时间】:2020-07-06 15:52:58
【问题描述】:
我正在尝试使用 alamofire 和 responseDecodable 向后端发出 API 请求。
AF.request(Router.registerFacebookUser(facebookToken: token)).validate().responseDecodable(of: UserConfig.self) { result in
switch result.result {
case let .success(userConfig):
onAuthentication(userConfig)
case let .failure(error):
print(error)
//somehow get the message from ERROR JSON and pass it here
onFailure(error.localizedDescription)
}
}
当调用成功时,它成功地将 JSON 解析到模型中。但是,作为一些特殊情况,它应该失败。例如,如果用户已经注册,我会收到响应 JSON:
{
"error":{
"message":"User already exist"
}
}
是否可以覆盖我们收到的 AF 错误?或者如果请求失败,也许可以解析另一个对象?还是有其他方法可以访问错误消息?
【问题讨论】:
-
当它“失败”时,你会得到一个不同的 JSON 类型的 200,还是你有不同的 HTTP 代码?那么这取决于您是否需要处理成功或失败的案例。
-
@Larme 失败时,我得到 400 和 JSON 错误。当它成功时 200 和 JSON for UserConfig
-
您可以使用自定义
validate()stackoverflow.com/questions/45955823/…(在以前的版本中,但在较新的版本中应该仍然可用)。然后你决定做什么:如果解析的错误不为零,则调用成功,如果不是,则不失败?此外,您应该能够从AFError检索数据。或者只是访问result.data? -
AFError将不包含响应Data。您可以创建自己的错误以包含已解析的错误响应。 -
@JonShier 是的,这就是我需要的,也许您有更多信息如何做到这一点?