Я только что пришел к противоположному выводу @alamar. Моя ситуация - написание сервлета в стиле REST, который будет вызываться кодом в базе данных Oracle, а не людьми.
Я хочу вернуть HTTP-код 400 Bad Request вызывающей стороне, когда информация о запросе неверна или отсутствует. Бросок ServletException
заставляет контейнер возвращать 500 Внутренняя ошибка сервера , в которой говорится, что с сервером что-то не так, а не с запросом.
Вот решение, которое я принял.
- Создать простой класс исключений
RequestException
, который расширяет Exception
.
- Проверить правильность запроса с помощью метода (ов), которые выдают
new RequestException(message)
.
Поймать RequestException
в методе сервлета doPost
и вызвать HttpServletResponse.sendError()
следующим образом:
try {
validateRequest(request);
// Do stuff with a valid request.
} catch (RequestException e) {
response.sendError(HttpServletResponse.SC_BAD_REQUEST, e.getMessage());
}
Сообщение возвращается вызывающей стороне, как если бы оно было ServletException
.