hata

2015-12-07 35 views
5
sunucu yanıt mesajı alın

Sunucum (CakePHP) şöyle yanıt veriyor:hata

$this->response->statusCode('400'); 
$this->response->type('json'); 
$this->response->body(json_encode(array('message' => 'Bookmark already exists'))); 

Postacı çıkışı ne beklediğiniz gibi görünür:

{ "mesaj": "işareti zaten var" }

sorun başarısızlık işleyicisi bu mesajı erişmek için bir yol bulamıyorum ki (Alamofire 3.1.3 + SwiftyJSON 2.3.2)

Alamofire.request(.POST... 
.validate() 
.responseJSON { response in 

switch response.result { 

case .Success(_):       
// All good 

case .Failure(let error): 
// Status code 400     
print(response.request) // original URL request 
print(response.response) // URL response 
print(response.data)  // server data 
print(response.result) 

JSON'a yanıt vermek için bir yol bulamıyorum çünkü sadece sıfırlamıyorum ve sonuç sadece ARIZA döndürüyor.

Bu sunucu mesajına hata işleyicisinden erişmenin bir yolu var mı?

+0

Eğer hızlı kod –

cevap

3

Bir Alamofire isteğindeki yanıt gövdesini okumak için aşağıdaki satırları kullandım.

Alamofire.request(.POST, serveraddress, headers: headers, encoding: .JSON) 
     .response{ request, response, data, error in 
      let responseData = String(data: data!, encoding: NSUTF8StringEncoding) 
      print(responseData) 


    } 

Bu gövde ile, özel sunucu yanıtı hata iletisini alabilirim.

saygılarımla

11

veri Alamofire 3.0 migration guide başına .Failure durumda değil ayrıştırılır. Ancak, sunucu verileri hala response.data olarak kullanılabilir ve ayrıştırılabilir. Aşağıda

elle ayrıştırmak için çalışması gerekir:

Alamofire.request(.POST, "https://example.com/create", parameters: ["foo": "bar"]) 
    .validate() 
    .responseJSON { response in 
    switch response.result { 
    case .Success: 
     print("Validation Successful") 
    case .Failure(_): 
      var errorMessage = "General error message" 

      if let data = response.data { 
      let responseJSON = JSON(data: data) 

      if let message: String = responseJSON["message"].stringValue { 
       if !message.isEmpty { 
       errorMessage = message 
       } 
      } 
      } 

      print(errorMessage) //Contains General error message or specific. 
    } 
    } 
} 

Bu NSData dönüştürmek için JSON yapı sağlar SwiftyJSON kullanır. JSON için JSData ayrıştırma SwiftyJSON olmadan yapılabilir, here yanıtladı.

Başka bir temizleme seçeneği Custom Response Serializer yazmak olabilir.

+0

Teşekkür ekleyin gerçekten benim gün kurtardı :) –

4

yönlendirici ve hiçbir SwiftyJSON ile bir yöntem:

Alamofire.request(APIRouter.Register(params: params)).validate().responseJSON { response in 
    switch response.result { 
     case .Success(let json): 
      let message = json["clientMessage"] as? String 
      completion(.Success(message ?? "Success")) 
     case .Failure(let error): 
      var errorString: String? 

      if let data = response.data { 
       if let json = try? NSJSONSerialization.JSONObjectWithData(data, options: []) as! [String: String] { 
        errorString = json["error"] 
       } 
      } 

      completion(.Error(errorString ?? error.localizedDescription)) 
     } 
    }