Кто вызывает методы контроллера в Spring MVC?

«Кто вызывает методы контроллера в Spring MVC?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Методы контроллера вызываются фреймворком Spring MVC автоматически в ответ на входящие HTTP-запросы. Весь процесс диспетчеризации управляется DispatcherServlet.

Механизм вызова:

  1. DispatcherServlet (Front Controller) получает HTTP-запрос.
  2. С помощью HandlerMapping определяется, какой контроллер и метод (@RequestMapping, @GetMapping и др.) должны обработать запрос.
  3. Параметры метода (тело запроса, параметры URL, переменные пути) резолвятся аргумент-резолверами (@RequestBody, @PathVariable).
  4. Вызывается метод контроллера.
  5. Возвращаемое значение обрабатывается 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.