Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/spring-mvc/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Swift RX Alamofire快速空响应JSON_Swift_Alamofire_Rx Swift - Fatal编程技术网

Swift RX Alamofire快速空响应JSON

Swift RX Alamofire快速空响应JSON,swift,alamofire,rx-swift,Swift,Alamofire,Rx Swift,我将Alamofire与rx一起使用,我有一个问题,即如果调用成功(状态200),则不会返回JSON。这会触发我的错误代码。如果我的状态是400,我就会得到JSON,所以调用就可以了 如何指定响应为JSON,但如果为空且状态代码为200,则不指定为error 谢谢 func createUser(httpBody: AccountDetails!) -> Observable<(NSHTTPURLResponse, AnyObject)> { return Alamo

我将Alamofire与rx一起使用,我有一个问题,即如果调用成功(状态200),则不会返回JSON。这会触发我的错误代码。如果我的状态是400,我就会得到JSON,所以调用就可以了

如何指定响应为JSON,但如果为空且状态代码为200,则不指定为error

谢谢

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)
            }
    }
}
func-createUser(httpBody:AccountDetails!)->可观察{
返回Alamofire.Manager.rx_请求(.POST,
APIService.REGISTER\u端点,
参数:httpBody.getParameters(),
编码:.JSON,
标题:无)
.平面图{
$0
.validate(状态代码:200..(NSHTTPURLResponse,AnyObject)在
返回(响应、对象)
}
}
}
编辑:


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

我通过将.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)
            }
    }
}
func-createUser(httpBody:AccountDetails!)->可观察{
返回apimager.sharedManager.rx_请求(.POST,
APIService.REGISTER\u端点,
参数:httpBody.getParameters(),
编码:.JSON,
标题:无)
.平面图{
$0
.验证(状态代码:[200400500])
.validate(contentType:[“application/json”])
.rx_responseData()
.map{(响应:NSHTTPURLResponse,对象:NSData)->(NSHTTPURLResponse,NSData)位于
返回(响应、对象)
}
}
}

最好将修复作为答案,并接受它作为答案:)sharedManager到底是什么?它的Alamofire.Manager.sharedInstance(我只是用APIManager类扩展了它)