API, который я использую, иногда возвращает сообщение об ошибке в формате JSON с дополнительной информацией о том, почему запрос не удался.
В настоящее время мне нужно реализовать превращение NSData в response.data в JSONDictionary, когда проверка не выполняется.
Мне было бы удобно, если бы Alamofire позаботился об этом.
Мне нужен способ пометить индивидуальные и / или глобальные запросы, чтобы заставить Alamofire попытаться преобразовать response.data, используя тот же тип сериализатора, который я использовал бы для данных ответа, даже если метод проверки не работает?
Я считаю, что в версии Alamofire 1.0 или 2.0 вы все равно можете получить преобразованный объект из result.value, даже если проверка не удалась. Было бы неплохо снова получить эту способность, поэтому я не реализую ту же логику, которая уже существует в ResponseSerializers Alamofire.
Спасибо за ваше время, и я надеюсь, что вы рассмотрите эту просьбу.
👍
Спасибо за запрос функции @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 у вас есть пример, как получить ошибку с сервера, нужно ли десериализовать данные?
Самый полезный комментарий
Спасибо за запрос функции @tobiasoleary!
Хотя я понимаю, откуда вы пришли, я не думаю, что именно так мы хотим пытаться справиться с этим делом. Если проверка завершается неудачей, то проверка - это то, что должно генерировать ошибку, из-за которой сериализатор ответов не запускается, так как ошибка уже произошла. Это означает, что если вы столкнетесь с ошибкой проверки, вы должны извлечь сообщение об ошибке из данных сервера непосредственно в закрытии проверки. В настоящее время это невозможно в Alamofire 3, если вы не написали расширение для
Request
.В Alamofire 4 мы упростили анализ ошибок из данных сервера, если это необходимо, добавив
data
илиtemporaryURL
иdestinationURL
в соответствующиеDataRequest
илиDownloadRequest
закрытие проверки. Более подробную информацию можно найти в руководстве поЕсли вы используете тот же сериализатор ответа, который используется для анализа сообщения об ошибке, который используется в обработчике ответа, то вы можете просто повторно использовать сериализатор в случае сбоя проверки. Однако во многих случаях полезная нагрузка для сбоя будет отличаться от успеха, поэтому вам придется использовать другую логику синтаксического анализа.
Надеюсь, это поможет прояснить ситуацию и направит вас в правильном направлении.
Ваше здоровье. 🍻