RX Alamofire Swift空响应JSON

时间:2016-06-10 13:27:03

标签: swift alamofire rx-swift

我正在使用Alamofire和rx,我遇到一个问题,如果调用成功(状态200),则没有返回JSON。这会触发我的错误代码。如果我获得状态400,我得到JSON,所以通话很好。

如何指定响应是JSON,但如果为空且状态代码为200,则不会出错?

谢谢!

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

编辑:

我通过将.rx_responseJSON()更改为.rx_responseData()并将NSData而不是AnyObject作为第二个参数来修复此问题。现在调用成功,我手动将数据转换为JSON。不确定这是否是正确的解决方案,但现在就足够了。很高兴听到更好的解决方案。 感谢

1 个答案:

答案 0 :(得分:1)

我通过将.rx_responseJSON()更改为.rx_responseData()并将NSData而不是AnyObject作为第二个参数来修复此问题。现在调用成功,我手动将数据转换为JSON。不确定这是否是正确的解决方案,但现在就足够了。很高兴听到更好的解决方案。感谢

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