@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».
• разницу `@PathVariable` и `@RequestParam` (если дошёл до 2-го слоя).