Ответ
DispatcherServlet использует стратегии HandlerMapping для сопоставления входящего HTTP-запроса с соответствующим обработчиком (контроллером).
Стандартный процесс маршрутизации:
- Получение запроса:
DispatcherServletполучает запрос. - Поиск обработчика: Он опрашивает все зарегистрированные реализации
HandlerMappingв порядке их приоритета, вызывая методgetHandler(HttpServletRequest request). Первый найденный ненулевой обработчик возвращается. - Сопоставление: По умолчанию
RequestMappingHandlerMappingанализирует аннотации в контроллерах (@RequestMapping,@GetMapping,@PostMappingи т.д.) и ищет совпадение по:- URL-пути (например,
/api/users). - HTTP-методу (GET, POST, PUT, DELETE).
- Параметрам запроса (
params). - Заголовкам (
headers). - Content-Type/Accept (
consumes/produces).
- URL-пути (например,
Пример:
@RestController
@RequestMapping("/api")
public class UserController {
@GetMapping("/users") // Сопоставляется с GET /api/users
public List<User> getAllUsers() {
return userService.findAll();
}
@PostMapping("/users") // Сопоставляется с POST /api/users
public User createUser(@RequestBody User user) {
return userService.save(user);
}
}
При запросе GET /api/users RequestMappingHandlerMapping найдет метод getAllUsers() и передаст его как обработчик в DispatcherServlet.