Ответ
Да, может. Для этого в аннотации маппинга (@RequestMapping, @GetMapping, @PostMapping и др.) нужно указать массив путей в атрибутах value или path.
Пример с @RequestMapping:
@RestController
@RequestMapping("/api")
public class UserController {
// Метод будет обрабатывать GET запросы на два разных URL
@RequestMapping(
value = {"/users", "/members"},
method = RequestMethod.GET
)
public ResponseEntity<List<User>> getAll() {
// Возвращает список пользователей для обоих эндпоинтов
return ResponseEntity.ok(userService.findAll());
}
}
Пример с @GetMapping (более современный и лаконичный вариант):
@RestController
public class ProductController {
// Массив путей в аннотации @GetMapping
@GetMapping({"/items", "/products", "/catalog"})
public List<Product> getProducts() {
return productRepository.findAll();
}
}
Как это работает:
- Spring MVC регистрирует один метод-обработчик для всех указанных в массиве URL-шаблонов.
- Это удобно для поддержки устаревших (legacy) путей или предоставления синонимов для одного ресурса.
- Аннотации класса (
@RequestMappingна уровне класса) и метода объединяются.