2016-06-10 15 views
1

Ich benutze Alamofire mit RX und ich habe ein Problem, dass, wenn der Aufruf erfolgreich ist (Status 200) gibt es keine JSON zurückgegeben. Dies löst meinen Fehlercode aus. Wenn ich den Status 400 bekomme, bekomme ich JSON, damit der Anruf in Ordnung ist.RX Alamofire Swift leere Antwort JSON

Wie gebe ich an, dass die Antwort JSON ist, aber nicht zu Fehler wenn leer und Statuscode 200?

Danke!

func createUser(httpBody: AccountDetails!) -> Observable<(NSHTTPURLResponse, AnyObject)> { 

    return Alamofire.Manager.rx_request(.POST, 
     APIService.REGISTER_ENDPOINT, 
     parameters: httpBody.getParameters(), 
     encoding: .JSON, 
     headers: nil) 
     .flatMap { 
      $0 
       .validate(statusCode: 200..<501) 
       .validate(contentType: ["application/json"]) 
       .rx_responseJSON() 
      .map { (response:NSHTTPURLResponse, object:AnyObject) -> (NSHTTPURLResponse, AnyObject) in 
        return (response, object) 
      } 
    } 
} 

EDIT:

I fixed dies durch Ändern .rx_responseJSON(), um .rx_responseData() und Zurückkehren NSData anstelle von ANYOBJECT als zweiten Parameter. Jetzt ist der Aufruf erfolgreich und ich wandle die Daten manuell in JSON um. Nicht sicher, ob dies die richtige Lösung ist, aber es wird für jetzt ausreichen. Freut mich aber, bessere Lösungen zu hören. Danke

+1

Besser, den Fix als Antwort zu setzen und das als Antwort zu akzeptieren :) –

Antwort

1

Ich habe das behoben, indem ich .rx_responseJSON() zu .rx_responseData() geändert habe und NSData anstelle von AnyObject als zweiten Parameter zurückgegeben habe. Jetzt ist der Aufruf erfolgreich und ich wandle die Daten manuell in JSON um. Nicht sicher, ob dies die richtige Lösung ist, aber es wird für jetzt ausreichen. Freut mich aber, bessere Lösungen zu hören. Danke

func createUser(httpBody: AccountDetails!) -> Observable<(NSHTTPURLResponse, NSData)> { 
    return APIManager.sharedManager.rx_request(.POST, 
     APIService.REGISTER_ENDPOINT, 
     parameters: httpBody.getParameters(), 
     encoding: .JSON, 
     headers: nil) 
     .flatMap { 
      $0 
       .validate(statusCode: [200,400,500]) 
       .validate(contentType: ["application/json"]) 
       .rx_responseData() 
      .map { (response:NSHTTPURLResponse, object:NSData) -> (NSHTTPURLResponse, NSData) in 
        return (response, object) 
      } 
    } 
} 
+0

Was genau ist der sharedManager? – user805981

+0

Seine Alamofire.Manager.sharedInstance (Ich habe es einfach mit meiner APIManager Klasse erweitert) –

Verwandte Themen