RX Alamofire Swift пустой ответ JSON

Я использую 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. Не уверен, что это правильное решение, но пока этого достаточно. Однако рад слышать лучшие решения. Спасибо


person Dan H    schedule 10.06.2016    source источник
comment
Лучше поместить исправление в качестве ответа и принять это как ответ :)   -  person Hamdullah shah    schedule 12.06.2016


Ответы (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)
            }
    }
}
person Dan H    schedule 13.06.2016
comment
Что такое общий менеджер? - person user805981; 19.08.2016
comment
Его Alamofire.Manager.sharedInstance (я просто расширил его своим классом APIManager) - person Dan H; 17.11.2016