Карта / Spring MVC / REST / @RestController

@RestController

@RestController — класс, методы которого обрабатывают HTTP-запросы и возвращают данные напрямую как JSON, без отдельного шаблона страницы.

@RestController
@RequestMapping("/api/users")
class UserController {

    @GetMapping("/{id}")                    // GET /api/users/5
    User getUser(@PathVariable Long id) {
        return userService.findById(id);     // Spring сам превратит User в JSON
    }

    @PostMapping                              // POST /api/users
    User createUser(@RequestBody User user) {  // тело запроса автоматически превращается в объект
        return userService.save(user);
    }
}

@GetMapping/@PostMapping/@PutMapping/@DeleteMapping — соответствуют HTTP-методам (подробнее — в теме «Принципы REST, коды ответов»).

Копнуть глубже

@RestController = @Controller + @ResponseBody. Обычный @Controller (используется в классическом Spring MVC с шаблонами страниц) возвращает имя страницы, которую нужно отрисовать. @ResponseBody говорит: «не ищи страницу, сериализуй возвращаемое значение прямо в тело ответа» — JSON для REST API.

@PathVariable vs @RequestParam:

@GetMapping("/{id}")
User getUser(@PathVariable Long id) { ... }    // /api/users/5 — часть пути

@GetMapping
List<User> search(@RequestParam String city) { ... }   // /api/users?city=Москва — query-параметр

Под капотом за роутингом стоит DispatcherServlet — единая точка входа для всех HTTP-запросов, которая решает, какой метод какого контроллера вызвать. Подробнее — в теме «DispatcherServlet».

🎤 Закрыл тему, если можешь объяснить:
• что делает `@RestController` и как маппинги связаны с HTTP-методами;
• разницу `@PathVariable` и `@RequestParam` (если дошёл до 2-го слоя).