Request Mapping

Базовый Spring
≈ 1 мин чтения

Как запрос находит метод контроллера

Spring MVC связывает HTTP-запросы с методами контроллера через mapping-аннотации. В mapping обычно участвуют путь и HTTP-метод. Самый общий вариант — @RequestMapping, а для конкретных HTTP-методов есть более короткие аннотации: @GetMapping, @PostMapping, @PutMapping, @PatchMapping и @DeleteMapping.

@RestController
@RequestMapping("/orders")
class OrderController {

    @GetMapping("/{id}")
    OrderDto find(@PathVariable long id) {
        return orderService.find(id);
    }

    @PostMapping
    OrderDto create(@RequestBody CreateOrderRequest request) {
        return orderService.create(request);
    }
}

Mapping на классе задаёт общий префикс /orders. Mapping на методах уточняют путь и HTTP-операцию: первый метод обрабатывает GET /orders/{id}, второй — POST /orders.

Один URL не означает один обработчик

Одинаковый путь может иметь разные методы для разных HTTP-операций. Это позволяет использовать один ресурсный URL и явно разделять чтение, создание, изменение и удаление. Кроме пути и HTTP-метода, mapping может учитывать дополнительные условия запроса, но в большинстве endpoints достаточно хорошо выбранного пути и подходящей специализированной аннотации.

Выбирай HTTP-метод по смыслу операции. Mapping — это часть внешнего контракта API, поэтому GET не стоит использовать для операции, которая изменяет состояние только потому, что так проще вызвать URL из браузера.