2017-10-13 14 views
0
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が私に送信している正確なエラーメッセージを印刷できません。Alamofire/AlamofireObjectMapper - responseObjectからエラーjsonを出力するにはどうすればよいですか?

po error.localizedDescription 

私はいつもalamofireすなわち "Response status code was unacceptable: 401." からデフォルトのメッセージを取得しています。 Invalid username and passwordのような動的エラーメッセージが表示されます。

ところで私は

.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) 
       } 

を使用して、動的エラーメッセージを印刷するresponseJsonを使用することができますしかし、私はresponseObjectと同じことを行う必要がありますか?

アップデート1から

パラメータ

let parameters = [ 
      "username": userName, 
      "password": password 
     ] 

応答

Login Response: { 
    error =  { 
    }; 
    message = "401 - {\"success\":false,\"message\":\"Invalid user/pass\"}"; 
} 
+0

あなたのAPIの回答を教えてもらえますか?ヘッダだけでなく、いくつかのAPI開発者がヘッダレスポンスにエラーを置くようにします。 – Glenn

+0

@Glenn - ヘッダーはゼロです。私はパラメータとAPIの応答で私の質問を更新しました。だから、私が.validate()を削除すると成功例に行き、私はresponse.result.valueでエラー応答を見ることができます。しかし、私が.validate()を追加すると、予想される失敗の場合がありますが、サーバーから送信されたエラー応答を出力できません。 – Tariq

+0

@タリックこんにちは私は、このエラー応答を探す場所を教えてくれる、これに対する答えを追加しました。私はAlamofireを使っている間に同様の問題を抱えていました。この問題をどうやって解決したのですか? –

答えて

2

あなたがResponse status code was unacceptable: 401.を得ている理由は、理由WHE呼び出される.validate()方法でありますn呼び出し要求、200〜299の許容範囲内にある応答コードのチェック(Alamofireの文書にもよる)

ステータスコードが受け入れられないあなたが持っているでしょう

response.data 

を行うことによって自分自身をデコードする:

let json = try? JSONSerialization.jsonObject(with: data, options: []) 

はあなたにAnyの値を返すよう、しかしそれは内部に座って、サーバーから送信されたものは何でも捨てていませんまたはexcを投げるこのアプリのブログ記事をチェックしてください:https://developer.apple.com/swift/blog/?id=37

関連する問題