【发布时间】:2017-10-13 03:20:34
【问题描述】:
Alamofire.request(URL, method: Endpoints.login.method, parameters: parameters, encoding: JSONEncoding.default, headers: nil)
.validate()
.responseObject { [weak self] (response: DataResponse<User>) in
switch response.result {
case .success(let user):
cb(.success(user))
case .failure(let error):
log.error(error)
cb(.failure(error))
}
}
如果我输入了错误的密码,那么我将无法打印 api 发送给我的确切错误消息。
po error.localizedDescription
我总是从 alamofire 收到默认消息,即“Response status code was unacceptable: 401.”。它应该打印像Invalid username and password 这样的动态错误消息。
顺便说一句,我可以使用 responseJson 来打印动态错误消息
.responseJSON { response in
if response.response?.statusCode == 200 {
print("Success with JSON: \(response.result.value)")
}
else {
let error = response.result.value as! NSDictionary
let errorMessage = error.object(forKey: "message") as! String
print(errorMessage)
}
但是我应该如何对responseObject 做同样的事情呢?
更新 1 -
参数
let parameters = [
"username": userName,
"password": password
]
回应
Login Response: {
error = {
};
message = "401 - {\"success\":false,\"message\":\"Invalid user/pass\"}";
}
【问题讨论】:
-
你能告诉我们你的 API 的响应吗?除了标头,导致一些 API 开发人员喜欢将错误放在标头响应中。
-
@Glenn - 标头为零。我已经用参数和 api 响应更新了我的问题。因此,如果我删除 .validate() 那么它将进入成功案例,我可以在 response.result.value 中看到错误响应。但是如果我添加 .validate() 那么它会进入预期的失败情况,但是我无法打印服务器发送的错误响应。
-
@Tariq 嘿,我为此添加了一个答案,这应该可以帮助您了解在哪里寻找该错误响应,我自己在使用 Alamofire 时也遇到了类似的问题,这就是我的解决方法这个问题
-
那么您需要从您的响应中解析
message数据。就是这样。 -
然后我不能添加 case .failure(let error) 因为它永远不会在 responseObject 中执行。相反,我必须使用 responseJSON。我想为映射器使用 responseObject
标签: ios json parsing alamofire objectmapper