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的默认消息,即&#34; Response status code was unacceptable: 401.
&#34;。它应该打印动态错误消息,如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\"}";
}
答案 0 :(得分:2)
您获得Response status code was unacceptable: 401.
的原因是因为在调用请求时调用了.validate()
方法,这样做的目的是检查应该在200 ... 299的可接受范围内的响应代码(根据Alamofire文件也是如此)
超出该范围的任何响应都会说状态代码是不可接受的,但它不会丢弃从服务器发送的任何内容,它位于内部:
response.data
你必须通过这样做解码自己:
let json = try? JSONSerialization.jsonObject(with: data, options: [])
会返回Any
的值或抛出异常,请查看此苹果博客文章以获取更多相关信息:https://developer.apple.com/swift/blog/?id=37