Согласно Спецификация сервлета :
Сервлет или фильтр могут выдавать следующие исключения при обработке запроса:
- исключения времени выполнения илиошибки
- Исключения Servlet или их подклассы
- Исключения IO или их подклассы
Если мы посмотрим на org.springframework.web.servlet.FrameworkServlet#processRequest
, мы увидим, что Spring выбрасывает ServletException
и IOException
, но включает другие, включая RuntimeExceptions
:
try {
doService(request, response);
} catch (ServletException | IOException ex) {
failureCause = ex;
throw ex;
} catch (Throwable ex) {
failureCause = ex;
throw new NestedServletException("Request processing failed", ex);
}
Почему Spring не обрабатывает RuntimeException
как IOException
?