Какой класс исключений Java использовать для ошибок HTTP?

Я использую Apache HttpClient и хочу передавать ошибки 9X_jdk HTTP (400 неверный запрос, 404 не найден, 500 9X_openjdk ошибка сервера и т. д.) через механизм исключений 9X_java-libraries Java в вызывающий код. Есть ли исключение 9X_custom-exceptions в стандартной библиотеке Java или в широко 9X_java используемой библиотеке, которое было бы 9X_j2se подходящим для использования или подкласса 9X_java для этой цели?

Альтернативой является проверка 9X_core-java кодов возврата статуса. Это похоже на философию 9X_custom-exceptions дизайна HttpClient, но поскольку эти ошибки 9X_java-se действительно являются исключительными в 9X_java-se моем приложении, я хотел бы, чтобы трассировка 9X_javax стека и другие приятные вещи исключения 9X_java настраивались для меня, когда они происходят.

32
0
6
Общее количество ответов: 6

Ответ #1

Ответ на вопрос: Какой класс исключений Java использовать для ошибок HTTP?

Если это не исключение в философии дизайна 9X_java HttpClient, а исключение в вашем коде, создайте 9X_oraclejdk свои собственные классы исключений. (Как 9X_custom-exceptions подкласс org.apache.commons.httpclient.HttpException)

17
1

  • если вы не заинтересованы в скорости, т ...

Ответ #2

Ответ на вопрос: Какой класс исключений Java использовать для ошибок HTTP?

Посетите страницу Exception Handling for HttpClient

Чтобы ответить на ваш 9X_custom-exceptions вопрос, похоже, есть класс org.apache.commons.httpclient.HttpException, который, вероятно, подходит.

Если 9X_java-se вам нужен собственный класс исключений для 9X_java-libraries этого, я думаю, что java.io.IOException будет правильным суперклассом 9X_jdk для использования.

11
0

Ответ #3

Ответ на вопрос: Какой класс исключений Java использовать для ошибок HTTP?

Быстрый ответ

Весной у вас есть именно то, что вы хотите:

И рекомендуемая практика

Как 9X_openjdk минимум, вы должны отличать исключения, связанные 9X_jdk с бизнес-логикой (например, недостаточный 9X_http баланс, недействительный адрес электронной 9X_j2se почты), от других исключений (например, сервер 9X_oraclejdk недоступен, неподдерживаемый тип мультимедиа, SQLException).

В 9X_exception нашем REST API у нас есть библиотека для 9X_core-java клиентов Java, которая анализирует ответы 9X_exception и выдает только три разных исключения:

  • 400, 401, 403, 404, 409, 422: throw MyBusinessException, который содержит сообщение, которое может быть показано конечному пользователю. Сообщение приходит в теле ответа (обработка исключений на стороне службы), но если его нет, у нас есть сообщение по умолчанию, специфичное для каждого кода состояния.
  • 405, 412, 415: выдать HttpClientErrorException сообщение, относящееся к каждому коду статуса.
  • другие коды 4xx: бросьте HttpClientErrorException с общим сообщением.
  • Коды 5xx: бросайте HttpServerErrorException с общим сообщением.

Все эти исключения не отмечены.

11
0

Ответ #4

Ответ на вопрос: Какой класс исключений Java использовать для ошибок HTTP?

Я бы сказал, это зависит от того, для чего 9X_java-libraries вы используете HTTPClient. Например, SDK 9X_java PayPal использует HttpClient для передачи 9X_core-java вызовов API на сервер PayPal, но не может 9X_http проверить код ответа HTTP, когда это будет 9X_javax сделано. Я пропатчил свою копию так, что 9X_custom-exceptions если код ответа не 200, он генерирует исключение 9X_jre PayPal FatalException с соответствующим 9X_.java сообщением. Это потому, что вызывающего 9X_jre абонента не интересует HTML или какие-либо 9X_java детали этого сообщения HTTP, и его даже 9X_.java не интересует тот факт, что мы используем 9X_http HTTP в качестве транспорта. Если вызов успешен, то 9X_exceptions тело ответа содержит детали транзакции, которые 9X_exception-handling извлекаются и помещаются в объект ответа; в 9X_http противном случае он содержит бесполезный 9X_javax HTML. В этом случае HTTP - это просто транспорт, поэтому 9X_exception определенные коды ответов указывают на ошибки, о 9X_javax которых можно сообщить с помощью исключений. Поскольку 9X_java это часть SDK PayPal, я использовал класс 9X_oraclejdk исключения PayPal. В какой-нибудь другой 9X_jdk системе или библиотеке я бы использовал 9X_j2se подтип любых исключений, которые эта библиотека 9X_exception-handling уже использует. Например, если бы я писал 9X_java-libraries библиотеку GMail, которая обращается к учетным 9X_exceptions записям GMail, я бы, вероятно, создал класс 9X_java-api GMailException и подкласс для различных 9X_exception-handling типов исключений, с которыми сталкивается 9X_custom-exceptions библиотека. В качестве альтернативы вы можете 9X_custom-exceptions использовать что-нибудь вроде IOException.

Причина, по 9X_java-api которой HttpClient заставляет вас проверять 9X_exceptions коды ответов, заключается в том, что ответ 9X_j2se может быть полезен, даже если код ответа 9X_http не равен 200. Некоторые веб-сайты помещают 9X_java-se полезный текст на страницу 404, предоставляя 9X_openjdk пользователю что-то полезное, или выполняя 9X_exception поиск форму или просто полезное сообщение 9X_.java об ошибке. В зависимости от вашего варианта 9X_j2se использования вы можете просто показать 9X_java-api содержимое ответа, а не генерировать исключение.

4
0

Ответ #5

Ответ на вопрос: Какой класс исключений Java использовать для ошибок HTTP?

Я обнаружил это исключение в Apache HTTP 9X_custom-exceptions Client 4.5.7:

...
import org.apache.http.client.HttpResponseException;

...
StatusLine statusLine = response.getStatusLine();
if(statusLine.getStatusCode() != 200) {
    throw new HttpResponseException(statusLine.getStatusCode(), statusLine.getReasonPhrase());
}
...

Пример результата:

Exception in thread "main" org.apache.http.client.HttpResponseException: status code: 400, reason phrase: Bad Request

4
0

Ответ #6

Ответ на вопрос: Какой класс исключений Java использовать для ошибок HTTP?

Есть org.apache.commons.httpclient.HttpException, если вам нужно исключение библиотеки. Мы 9X_custom-exceptions также иногда создавали свои собственные 9X_exception-handling для определенных целей, создавая как исключение 9X_exception для определенных кодов состояния HTTP, так 9X_http и общее исключение для неожиданного кода 9X_exceptions состояния.

2
1

  • HttpException - это подкласс ...