2016-03-31 3 views
3

Это мой первый раз, когда я использовал Alamofire, и это меня сильно расстроило.Не удалось получить сообщение об ошибке сервера от Alamofire 3.3.0

Я использую следующий код для вызова API SIGNUP на бэкэнд API

Alamofire.request(.POST, "\(self.authBaseURL)/signup", parameters: params, headers: headers, encoding: .JSON) 
      .validate(statusCode: 200..<300) 
      .validate(contentType: ["application/json"]) 
      .responseJSON { response in 
       switch response.result { 
       case .Success(let JSON): 
        print("Success with JSON: \(JSON)") 
        success(updatedUser) 
       case .Failure(let error): 
        print("Request failed with error: \(error)") 
        failure(error) 
       } 

     } 

Проблема заключается в том, что объект ошибки я получаю в функции .Failure не содержит на стороне сервера сообщение , Я попытался получить доступ к остальным объектам (запрос, ответ, данные, результат) Я не смог найти свое сообщение об ошибке в любом месте

Я всегда получаю следующую ошибку, независимо от того, что сообщение сервера должно сказать , Не удалось выполнить запрос с ошибкой:

FAILURE: Error Domain=com.alamofire.error Code=-6003 "Response status code was unacceptable: 400" UserInfo={NSLocalizedFailureReason=Response status code was unacceptable: 400}

Есть что-нибудь не так я делаю?

Swift 2,2, AlamoFire 3.3.0, Xcode 7,3

+0

Таким образом, вместо '' .responseJSON' попробовать .responseString' и сделать 'печати (ответ)' и посмотреть, если вы получаете то, что не должны. Позже, когда вы найдете проблему, вернитесь к '.responseJSON' – Fennec

+0

Выполнено, что уже, однако ошибка, которую я получаю, по-прежнему остается прежней. Сервер выдает правильное сообщение об ошибке (я создал другого клиента с AngularJS), но я все еще не могу получить его в ios –

+0

@JosephWahba, смогли ли вы решить свою оригинальную проблему? То есть, получение данных об ошибках, кодах, данных пользователя? Я пытаюсь сделать то же самое. Можете ли вы проверить мой вопрос по адресу http://stackoverflow.com/q/42591945/7029165, если вы можете помочь, пожалуйста? – Daniel

ответ

8

мне удалось заставить его работать именно так, как я хочу, понижая проверку состояния и проверить на StatusCode вручную

Alamofire.request(.POST, "\(self.authBaseURL)/signup", parameters: params, headers: headers, encoding: .JSON) 
      .validate(contentType: ["application/json"]) 
      .responseJSON { response in 
       if response.response?.statusCode == 200 { 
        print("Success with JSON: \(response.result.value)") 

        success(updatedUser) 
       } 
       else { 
        let error = response.result.value as! NSDictionary 
        let errorMessage = error.objectForKey("message") as! String 
        print(errorMessage) 
        failure(errorMessage) 
       } 


     } 
+0

Я не могу получить журнал ошибок сервера с 404 кодом состояния, поле данных всегда равно нулю и получение этого ответа [Результат]: FAILURE: Error Domain = NSURLErrorDomain Code = -1015 «не может декодировать необработанные данные» – rinkesh

1

updated for swift 3 :

Используется ниже строк кода: -

Alamofire.request(escapedString!, method: .get, encoding: JSONEncoding.default) 
     .validate(contentType: ["application/json"]) 
     .responseJSON { response in 
      if response.response?.statusCode == 200 { 
       print("Success with JSON: \(String(describing: response.result.value))") 

      } 
      else { 
       let error = (response.result.value as? [[String : AnyObject]]) 
       print(error as Any) 
      } 
    } 
+0

Это не только это не работа, но это сработает, если result.value равен нулю, что обычно для AlamoFire Result. –

+0

@Randy Hill, Я обновил код выше ... теперь он работает нормально ...! , пожалуйста, проверьте еще раз и сообщите мне, есть ли у вас какие-либо проблемы с этим? –

+0

Я удалил свой голос, потому что теперь он не сбой, и это разумный пример использования .responseJSON. Но используемый вопрос проверяет (statusCode: 200 .. <300), что заставляет ошибки обрабатываться совершенно по-другому. Он предоставляет response.result, который сообщает вам, успешно ли он, и непосредственно дает объект ошибки для .failure. См. Мой пример. –

0

Это, как получить домен ошибки, код и данные пользователя ш с Alamofire 4 и Swift 3. Информация о пользователе содержит строки ошибок.

Alamofire.request(.POST, "\(self.authBaseURL)/signup", parameters: params, headers: headers, encoding: .JSON) 
      .validate(statusCode: 200..<300) 
      .validate(contentType: ["application/json"]) 
      .responseJSON { response in 
       switch response.result { 
       case .Success(let JSON): 
        print("Success with JSON: \(JSON)") 
        success(updatedUser) 
       case .Failure(let error): 
        let errorCode = error._code 
        let errorDomain = error._domain 
        let userInfo = error._userInfo 
        print("Request failed with error: \(error), code: \(errorCode), domain: \(errorDomain)") 
        failure(error) 
       } 

     } 
Смежные вопросы