Ответ 1
Я только что пришел к противоположному выводу @alamar. Моя ситуация заключается в написании сервлета типа REST, который вызывается кодом в базе данных Oracle, а не людьми.
Я хочу вернуть HTTP-код 400 Bad Request вызывающему, когда информация запроса недействительна или отсутствует. Выбрасывание ServletException
приводит к возврату контейнера 500 Internal Server Error, в котором говорится, что с сервером что-то не так, а не с запросом.
Вот решение, которое я принял.
- Создайте простой класс исключений
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
.