Путь HTTP-запроса в Spring MVC
Вопрос
Опишите, что происходит с HTTP-запросом в Spring Boot приложении от сокета до ответа.
Попробуйте сами
Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.
Показать ответ и разбор
Коротко
Что должно прозвучать в ответе
Tomcat: поток из пула на запрос
Фильтры сервлета, Spring Security
DispatcherServlet, HandlerMapping, интерсепторы
Аргументы: PathVariable, RequestBody через HttpMessageConverter, валидация
Метод контроллера, сервис, транзакция
Сериализация ответа, обработка исключений в ControllerAdvice
Что могут спросить следом
- Где лучше делать аутентификацию и почему?
- Что изменится с виртуальными потоками?
Разбор
Tomcat принимает соединение и выдаёт запросу поток из пула, по умолчанию до 200. Запрос проходит цепочку фильтров: там CORS, логирование и Spring Security с аутентификацией. Затем DispatcherServlet через HandlerMapping находит метод контроллера, вызывает preHandle интерсепторов, а HandlerAdapter собирает аргументы: путь, параметры, тело через Jackson, и запускает валидацию для @Valid. Метод контроллера вызывает сервис, обычно через транзакционный прокси. Результат сериализуется конвертером в JSON. Если вылетело исключение, его обрабатывает @RestControllerAdvice и превращает в ProblemDetail с нужным статусом. Весь путь занимает один поток, поэтому медленные вызовы внутри опасны; с виртуальными потоками это ограничение сильно ослабевает.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.