Sobes.tech
Назад к вопросам
Junior — Middle
61

Каким образом DispatcherServlet идентифицирует конкретный класс контроллера для обработки входящего запроса?

Ответ от нейросети

sobes.tech AI

В Spring MVC класс DispatcherServlet отвечает за маршрутизацию HTTP-запросов к соответствующим контроллерам.

Идентификация конкретного контроллера происходит через механизм сопоставления URL-запроса с методами контроллеров, который реализован с помощью:

  1. HandlerMapping:

    • DispatcherServlet использует один или несколько бинов HandlerMapping для поиска подходящего обработчика.
    • Обычно это RequestMappingHandlerMapping, который сопоставляет URL и HTTP-метод с методами, аннотированными @RequestMapping или подобными.
  2. Аннотации в контроллерах:

    • Методы контроллеров помечаются аннотациями, указывающими путь и HTTP-метод.
    • Например, @GetMapping("/users").
  3. Поиск и выбор контроллера:

    • DispatcherServlet передаёт запрос HandlerMapping, который возвращает HandlerMethod (метод контроллера).
    • Затем DispatcherServlet вызывает этот метод для обработки запроса.

Пример:

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

    @GetMapping("/{id}")
    public User getUser(@PathVariable String id) {
        // обработка запроса
    }
}

При запросе GET /users/123 DispatcherServlet через HandlerMapping найдёт метод getUser класса UserController и вызовет его.