Маршрутизация запросов

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

@RequestMapping — основная аннотация маршрутизации в Spring MVC и Spring Boot, сопоставляющая HTTP-запросы с методами-обработчиками или целыми классами контроллеров на основе URL-пути, HTTP-метода, параметров запроса, заголовков и медиа-типов. При размещении на уровне класса @RestController аннотация @RequestMapping("/api/v1/users") задаёт общий префикс пути для всех методов класса, тогда как @RequestMapping(method = RequestMethod.GET) на уровне метода — или её сокращение @GetMapping — сужает маршрут до конкретного HTTP-глагола. Составные аннотации @GetMapping, @PostMapping, @PutMapping, @DeleteMapping и @PatchMapping — удобные варианты, делегирующие к @RequestMapping и повышающие читаемость в RESTful Spring Boot-контроллерах, построенных вокруг HTTP-семантики. Атрибуты produces и consumes аннотации @RequestMapping обеспечивают согласование контента: обработчик с produces = MediaType.APPLICATION_JSON_VALUE сопоставляется только тогда, когда клиент отправляет Accept: application/json, позволяя одному эндпоинту обслуживать JSON и XML разными методами. @RequestMapping интегрируется с SecurityFilterChain Spring Security для авторизации по пути, Spring Boot Actuator для управления доступностью эндпоинтов и @CrossOrigin для настройки CORS в архитектурах одностраничных приложений.

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

Маршрутизация запросов: 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, но только при реальной нужде.

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

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

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

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