Ответ
Spring MVC не поддерживает множественное сопоставление одного метода с разными аннотациями запросов. Будет применена только одна из аннотаций, что приведет к неопределенному поведению (зависит от порядка сканирования). Это считается ошибкой конфигурации.
Неправильный пример (избегайте этого):
@Controller
public class MyController {
// КОНФЛИКТ: Метод будет сопоставлен только с одной аннотацией.
@RequestMapping(path = "/api", method = RequestMethod.POST)
@PostMapping("/api")
public ResponseEntity<String> create() {
return ResponseEntity.ok("created");
}
}
Правильный подход: Используйте одну, наиболее конкретную аннотацию.
// Правильно: используйте только @PostMapping для ясности.
@PostMapping("/api")
public ResponseEntity<String> create() {
return ResponseEntity.ok("created");
}
// Или, что эквивалентно, только @RequestMapping.
@RequestMapping(path = "/api", method = RequestMethod.POST)
public ResponseEntity<String> createAlternative() {
return ResponseEntity.ok("created");
}
Почему так? Аннотации @GetMapping, @PostMapping и др. являются мета-аннотациями, сами помеченными @RequestMapping. Навешивание двух таких аннотаций создает конфликтующую мета-информацию для HandlerMapping.