IOException поймал клиентскую сторону при возврате кода ошибки http

У меня есть автономное приложение java, которое предоставляет два метода через интерфейс: get - для запросов GET к URL-адресу и post - для отправки запросов POST к URL-адресу. Я использую чистую Java для реализации методов (без HTTP-клиента Apache).

Моя проблема в том, что при возврате ошибки HTTP с сервера я получаю IOException на стороне клиента (для всех кодов >= 400). Спорить о том, правильное ли это поведение (ИМХО, нет), смысла нет. В любом случае, мне нужно проверить, было ли IOException вызвано проблемой подключения или ошибкой HTTP, так как мне нужно реализовать различное поведение для этих двух ситуаций. Кто-нибудь знает достойное решение, чтобы проверить это? (под приличным я подразумеваю отсутствие проверки сообщения об исключении «Сервер вернул код ответа HTTP»)

Любые идеи действительно ценятся.

Спасибо.


person Alina    schedule 29.02.2012    source источник


Ответы (1)


Вы мало что можете сделать, кроме как проанализировать строку исключения. Если вы посмотрите в источнике HttpURLConnection:

            if (respCode >= 400) {
                if (respCode == 404 || respCode == 410) {
                    throw new FileNotFoundException(url.toString());
                } else {
                    throw new java.io.IOException("Server returned HTTP" +
                          " response code: " + respCode + " for URL: " +
                          url.toString());
                }
            }

вы увидите, что это не очень полезно.

person artbristol    schedule 29.02.2012