2016-06-15 7 views
0

解析されたJSONレスポンスを取得し、プロパティをチェックし、その値に応じてtrue/falseを返すAlamofireバリデータを持つことは可能ですか?AlamofireでJSONレスポンスを検証

私はいつも200応答コードを返すAPIを持っていますが、応答には成功プロパティがあります。

responseJSONコールバックが発生する前にこのプロパティをチェックし、success == trueの場合のみresponseJSONを呼び出したいと思います。

これはカスタムバリデータで可能ですか?

+0

これは成功ハンドラ内で達成するために信じられないほど単純なことのようです:

import Foundation import Alamofire extension Request { public func apiSuccess( queue queue: dispatch_queue_t? = nil, options: NSJSONReadingOptions = .AllowFragments, completionHandler: [String:AnyObject] -> Void) -> Self { return response( queue: queue, responseSerializer: Request.JSONResponseSerializer(options: options), completionHandler: { response in if let jsonValue = response.result.value as? [String:AnyObject] { let success = jsonValue["success"] as! Bool if (success) { completionHandler(jsonValue["object"] as! [String:AnyObject]) } } } ) } public func apiError( queue queue: dispatch_queue_t? = nil, options: NSJSONReadingOptions = .AllowFragments, completionHandler: [String] -> Void) -> Self { return response( queue: queue, responseSerializer: Request.JSONResponseSerializer(options: options), completionHandler: { response in if let jsonValue = response.result.value as? [String:AnyObject] { let success = jsonValue["success"] as! Bool if (!success) { let errorDict = jsonValue["errors"] as! [String:[String]] var errors : [String] = [] errorDict.keys.forEach { key in errors += errorDict[key] as [String]! } completionHandler(errors) } } } ) } } 

それから私はこのようにそれを使用することができます。これをワンライナーにすることができます。 – CouchDeveloper

答えて

0

そう思わない。バリデータブロックは、応答データを引数として、ヘッダのみなどを受け取ることはありません。

+0

OK。たぶん私は独自のバージョンのresponseJSONを書く必要があります。 –

+0

バリデータブロック**は応答データを受信します**。 https://github.com/Alamofire/Alamofire/blob/a502949e2d64ac8e15cdbf7fa5353c39bc7cd10e/Source/Validation.swift#L164を参照してください。 –

3

解決策が見つかりました。最初に、エラーをチェックし、私が興味を持っているデータを抽出する拡張メソッドを作成しました。私は成功コールバックとエラーコールバックを1つ持っています。 - すべての基盤となるネットワークライブラリに直交

Alamofire.request(.POST, url, 
      parameters: parameters, 
      encoding: .JSON) 
      .apiSuccess { response in 
       print("Success Callback", response) 
      } 
      .apiError { errors in 
       print("Errors ", errors) 
     }