Ответ
HTTP-метод для обработчика запросов в Spring MVC указывается с помощью специализированных аннотаций уровня метода. Эти аннотации являются мета-аннотациями над @RequestMapping с предустановленным методом.
Основные аннотации (Spring 4.3+):
@GetMapping— для GET запросов (извлечение данных).@PostMapping— для POST запросов (создание ресурса).@PutMapping— для PUT запросов (полное обновление ресурса).@DeleteMapping— для DELETE запросов (удаление ресурса).@PatchMapping— для PATCH запросов (частичное обновление).
Универсальная аннотация @RequestMapping:
Можно использовать её, явно указав метод (актуально для старых версий Spring или нестандартных методов).
@RequestMapping(value = "/api/users", method = RequestMethod.GET)
Практический пример в @RestController:
@RestController
@RequestMapping("/api/users")
public class UserController {
@GetMapping // Обрабатывает GET /api/users
public List<User> getAllUsers() {
return userService.findAll();
}
@GetMapping("/{id}") // Обрабатывает GET /api/users/{id}
public User getUserById(@PathVariable Long id) {
return userService.findById(id);
}
@PostMapping // Обрабатывает POST /api/users
@ResponseStatus(HttpStatus.CREATED)
public User createUser(@RequestBody @Valid UserDto userDto) {
return userService.create(userDto);
}
@PutMapping("/{id}") // Обрабатывает PUT /api/users/{id}
public User updateUser(@PathVariable Long id, @RequestBody UserDto userDto) {
return userService.update(id, userDto);
}
@DeleteMapping("/{id}") // Обрабатывает DELETE /api/users/{id}
@ResponseStatus(HttpStatus.NO_CONTENT)
public void deleteUser(@PathVariable Long id) {
userService.delete(id);
}
}
Важно: DispatcherServlet использует HandlerMapping для сопоставления входящего HTTP-запроса (URL + метод) с соответствующим методом контроллера на основе этих аннотаций.