【问题标题】:RX Alamofire Swift empty response JSONRX Alamofire Swift 空响应 JSON
【发布时间】:2016-06-10 13:27:03
【问题描述】:

我将 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。不确定这是否是正确的解决方案,但现在就足够了。很高兴听到更好的解决方案。 谢谢

【问题讨论】:

  • 最好将修复作为答案并接受它作为答案:)

标签: swift alamofire rx-swift


【解决方案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)
            }
    }
}

【讨论】:

  • sharedManager 到底是什么?
  • 它的 Alamofire.Manager.sharedInstance(我只是用我的 APIManager 类对其进行了扩展)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-07-22
  • 1970-01-01
  • 2021-09-17
  • 1970-01-01
  • 2020-03-28
  • 2014-11-15
相关资源
最近更新 更多