Alamofire: Запрос функции - отметьте, чтобы запросить преобразование данных response.data даже в случае сбоя проверки.

Созданный на 5 сент. 2016  ·  3Комментарии  ·  Источник: Alamofire/Alamofire

API, который я использую, иногда возвращает сообщение об ошибке в формате JSON с дополнительной информацией о том, почему запрос не удался.

В настоящее время мне нужно реализовать превращение NSData в response.data в JSONDictionary, когда проверка не выполняется.

Мне было бы удобно, если бы Alamofire позаботился об этом.

Мне нужен способ пометить индивидуальные и / или глобальные запросы, чтобы заставить Alamofire попытаться преобразовать response.data, используя тот же тип сериализатора, который я использовал бы для данных ответа, даже если метод проверки не работает?

Я считаю, что в версии Alamofire 1.0 или 2.0 вы все равно можете получить преобразованный объект из result.value, даже если проверка не удалась. Было бы неплохо снова получить эту способность, поэтому я не реализую ту же логику, которая уже существует в ResponseSerializers Alamofire.

Спасибо за ваше время, и я надеюсь, что вы рассмотрите эту просьбу.

feature request response validation

Самый полезный комментарий

Спасибо за запрос функции @tobiasoleary!

Хотя я понимаю, откуда вы пришли, я не думаю, что именно так мы хотим пытаться справиться с этим делом. Если проверка завершается неудачей, то проверка - это то, что должно генерировать ошибку, из-за которой сериализатор ответов не запускается, так как ошибка уже произошла. Это означает, что если вы столкнетесь с ошибкой проверки, вы должны извлечь сообщение об ошибке из данных сервера непосредственно в закрытии проверки. В настоящее время это невозможно в Alamofire 3, если вы не написали расширение для Request .

В Alamofire 4 мы упростили анализ ошибок из данных сервера, если это необходимо, добавив data или temporaryURL и destinationURL в соответствующие DataRequest или DownloadRequest закрытие проверки. Более подробную информацию можно найти в руководстве по

Alamofire.request(urlString)
    .validate { request, response, data in
        guard let data = data else { return .failure(customError) }

        // 1) Validate the response to make sure everything looks good
        // 2) If validation fails, you can now parse the error message out of the
        //    data if necessary and add that to your custom error if you wish.

        return .success
    }
    .response { response in
        debugPrint(response)
    }

Если вы используете тот же сериализатор ответа, который используется для анализа сообщения об ошибке, который используется в обработчике ответа, то вы можете просто повторно использовать сериализатор в случае сбоя проверки. Однако во многих случаях полезная нагрузка для сбоя будет отличаться от успеха, поэтому вам придется использовать другую логику синтаксического анализа.

Надеюсь, это поможет прояснить ситуацию и направит вас в правильном направлении.

Ваше здоровье. 🍻

Все 3 Комментарий

👍

Спасибо за запрос функции @tobiasoleary!

Хотя я понимаю, откуда вы пришли, я не думаю, что именно так мы хотим пытаться справиться с этим делом. Если проверка завершается неудачей, то проверка - это то, что должно генерировать ошибку, из-за которой сериализатор ответов не запускается, так как ошибка уже произошла. Это означает, что если вы столкнетесь с ошибкой проверки, вы должны извлечь сообщение об ошибке из данных сервера непосредственно в закрытии проверки. В настоящее время это невозможно в Alamofire 3, если вы не написали расширение для Request .

В Alamofire 4 мы упростили анализ ошибок из данных сервера, если это необходимо, добавив data или temporaryURL и destinationURL в соответствующие DataRequest или DownloadRequest закрытие проверки. Более подробную информацию можно найти в руководстве по

Alamofire.request(urlString)
    .validate { request, response, data in
        guard let data = data else { return .failure(customError) }

        // 1) Validate the response to make sure everything looks good
        // 2) If validation fails, you can now parse the error message out of the
        //    data if necessary and add that to your custom error if you wish.

        return .success
    }
    .response { response in
        debugPrint(response)
    }

Если вы используете тот же сериализатор ответа, который используется для анализа сообщения об ошибке, который используется в обработчике ответа, то вы можете просто повторно использовать сериализатор в случае сбоя проверки. Однако во многих случаях полезная нагрузка для сбоя будет отличаться от успеха, поэтому вам придется использовать другую логику синтаксического анализа.

Надеюсь, это поможет прояснить ситуацию и направит вас в правильном направлении.

Ваше здоровье. 🍻

@gchaturvedi у вас есть пример, как получить ошибку с сервера, нужно ли десериализовать данные?

Была ли эта страница полезной?
0 / 5 - 0 рейтинги

Смежные вопросы

sarbogast picture sarbogast  ·  3Комментарии

matthijsotterloo picture matthijsotterloo  ·  3Комментарии

filippovdev picture filippovdev  ·  3Комментарии

yokesharun picture yokesharun  ·  3Комментарии

yamifr07 picture yamifr07  ·  3Комментарии