Ответ
Методы контроллера вызываются фреймворком Spring MVC автоматически в ответ на входящие HTTP-запросы. Весь процесс диспетчеризации управляется DispatcherServlet.
Механизм вызова:
DispatcherServlet(Front Controller) получает HTTP-запрос.- С помощью
HandlerMappingопределяется, какой контроллер и метод (@RequestMapping,@GetMappingи др.) должны обработать запрос. - Параметры метода (тело запроса, параметры URL, переменные пути) резолвятся аргумент-резолверами (
@RequestBody,@PathVariable). - Вызывается метод контроллера.
- Возвращаемое значение обрабатывается
HandlerAdapterи преобразуется в HTTP-ответ (JSON, HTML) черезViewResolverилиHttpMessageConverter.
Пример контроллера:
@RestController // @Controller + @ResponseBody
@RequestMapping("/api/users")
public class UserController {
@GetMapping("/{id}")
// Spring вызовет этот метод для GET /api/users/123
// и автоматически сконвертирует "123" в Long
public ResponseEntity<User> getUser(@PathVariable Long id) {
User user = userService.findById(id);
return ResponseEntity.ok(user);
}
}
Разработчик только объявляет методы и маппинги, а их вызов — ответственность контейнера Spring.