Я использую Retrofit (2.6) на Android для реализации службы, которая подключается к веб-серверу и запрашивает, чтобы сервер предпринял некоторую работу. Соответствующий код можно обобщить следующим образом:
interface MyService {
@GET(START_WORK)
suspend fun startWork(@Query("uuid") uuid: String,
@Query("mode") mode: Int):
MyStartWorkResponse
}
// Do some other things, include get a reference to a properly configured
// instance of Retrofit.
// Instantiate service
var service: MyService = retrofit.create(MyService::class.java)
Я могу без проблем позвонить service.startWork()
и получить действительные результаты. Однако в некоторых случаях веб-сервер возвращает код ошибки 400 с телом ответа, в котором указана c информация об ошибке. Однако запрос не искажен; просто есть еще одна проблема, на которую следует обратить внимание пользователя. Проблема в том, что я не могу сказать, в чем проблема, потому что я не получаю ответ; вместо этого мой вызов вызывает исключение из-за кода ошибки 400.
Я не понимаю, как изменить свой код, чтобы я мог перехватить и обработать 400 ответов об ошибках и получить необходимую информацию из тела ответа. Это работа сетевого перехватчика на моем клиенте okhttp? Кто-нибудь может пролить свет?