Alamofire / AlamofireObjectMapper - 如何从responseObject打印错误json?

时间:2017-10-13 03:20:34

标签: ios json parsing alamofire objectmapper

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\"}";
}

1 个答案:

答案 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