2016-08-04 4 views
2

Alamofire.validate()を呼び出して自動検証を行い、ステータスコード200...299を成功として渡します。Alamofire:障害発生時に応答データを取得する方法はありますか?

API要求が失敗した場合、サーバーはステータスコード400と内部エラーメッセージとコードをJSONで送信し、これがどの種類のエラーであるかを識別します。

Alamofire.request(.GET, "https://httpbin.org/get", parameters: ["foo": "bar"]) 
     .validate() 
     .responseJSON { response in 
      switch response.result { 
      case .Success: 
       print("Validation Successful") 
      case .Failure(let error): 
       print(error) 
      } 
     } 

errorは、応答データが含まれていません:私は、ケースのステータスコードでこのJSONデータを取得する方法は、次の例ではcase .Failure400で見つけることができませんでした。それを得るためにとにかくありますか?

+0

私は以前のような問題を抱えています。これまでの方法ではサーバが実装されておらず、手作業で自分自身を検証する必要がありました。エラーがJSONのエラーに関するデータを返す可能性があります。この場合、エラーが空になる可能性があります。 –

+0

@ VictorSigler Serverが正しく実装されています。例:ログインリクエストとしましょう。ユーザーがログインしている場合はstatusCodeは200ですが、ユーザーがログインしていない場合はstatusCodeが400でJSONレスポンスでユーザーがログインしていない理由(無効なパスワード、アカウントの期限切れなど) – Sharj

+0

はい、上記のように、私はAlamofireの 'validate()'を使うことができないのではないかと心配しています。あなたは 'statusCode'をレスポンスに使って、この狂気のために過去のようにAPI :) –

答えて

0

エラー時にサーバーから返されたJSONデータがある場合、あなたは同様に、レスポンスオブジェクトからそれを得ることができる必要があります:

print(response.result) // result of response serialization 

if let JSON = response.result.value { 
    print("JSON: \(JSON)") 
} 

あなたはまた、Alamofireによって返さERRORTYPEオブジェクトをサブクラス化することができます

public enum BackendError: ErrorType { 
    case Network(error: NSError) 
    case DataSerialization(reason: String) 
    case JSONSerialization(error: NSError) 
    case ObjectSerialization(reason: String) 
    case XMLSerialization(error: NSError) 
} 

返すカスタムエラーオブジェクトを作成したくない場合は、エラーの詳細が表示されます。これに関する詳細は、Alamofireのドキュメントからhttps://github.com/Alamofire/Alamofire#handling-errors

関連する問題