Web Mvc

Тема дорожной карты · Spring Boot

Spring MVC — это веб-фреймворк Model-View-Controller, лежащий в основе веб-поддержки Spring Boot, который сопоставляет HTTP-запросы с Java-методами-обработчиками через центральный DispatcherServlet и предоставляет богатый набор аннотаций для создания как традиционных серверно-рендерированных приложений, так и современных RESTful API. Стереотипы @Controller и @RestController помечают классы как обработчики Spring MVC; @RequestMapping, @GetMapping, @PostMapping, @PutMapping, @DeleteMapping и @PatchMapping привязывают отдельные методы к URL-паттернам и HTTP-глаголам, тогда как @PathVariable, @RequestParam и @RequestBody извлекают данные из запроса. Spring MVC интегрируется с Bean Validation через @Valid на параметрах @RequestBody, со Spring Security SecurityFilterChain для аутентификации и авторизации на уровне фильтра, и со Spring Data через бины @Service, внедрённые в контроллеры через стандартный Spring IoC-контейнер. Согласование контента автоматически обрабатывается реализациями HttpMessageConverterMappingJackson2HttpMessageConverter Jackson сериализует и десериализует JSON, позволяя методам @RestController возвращать доменные объекты напрямую без какого-либо шаблонного кода сериализации. Spring MVC полностью тестируется с @WebMvcTest и MockMvc, поддерживает асинхронную обработку через Callable и DeferredResult и служит фундаментом, который Spring WebFlux заменяет в реактивных Spring Boot-приложениях, требующих неблокирующего I/O на Netty.

Как это работает

Web Mvc: Spring MVC + REST. @RestController возвращает JSON (или что HttpMessageConverter выберет); @RequestMapping (или method-specific @GetMapping/@PostMapping) маппит URL → handler. @PathVariable для /users/{id}, @RequestParam для query string, @RequestBody для десериализации body. @Valid + Bean Validation (Jakarta Validation) проверяет input. @ControllerAdvice + @ExceptionHandler централизуют error → HTTP-response маппинг. Servlet-стек на Tomcat дефолт; переключайтесь на Jetty/Undertow через starter exclusions.

Когда применять

DTO на границе controller — никогда не экспортируйте JPA-сущности напрямую (утечка внутренней модели + lazy-loading issues). Централизуйте error handling в @ControllerAdvice — дублированный try/catch = технический долг. Валидация рано. OpenAPI (springdoc-openapi) для документации + генерации клиентов. Для high-throughput non-blocking — WebFlux, но только при реальной нужде.

Типичные ошибки

Ловушки Web Mvc: возврат JPA-сущностей (lazy-loading бьёт DB после закрытия транзакции → LazyInitializationException); нет валидации input (мусор лезет в service-слой); не используют @ControllerAdvice (error handling разбросан, неконсистентные ответы); игнор HTTP-семантики (200 на ошибках).

Связанные понятия

Полезные ресурсы