Gymterview
junior

Как работают аннотации маппинга запросов: @RequestMapping, @GetMapping, @PostMapping?

Эти аннотации связывают HTTP-запросы с методами контроллера. @GetMapping, @PostMapping и другие – сокращения для @RequestMapping с конкретным HTTP-методом.

Пример
@RestController
@RequestMapping("/api/v1/users") // общий префикс
public class UserController {

    @GetMapping                    // GET /api/v1/users
    public List<UserDto> findAll() { }

    @GetMapping("/{id}")           // GET /api/v1/users/123
    public UserDto findById(@PathVariable Long id) { }

    @PostMapping                   // POST /api/v1/users
    public UserDto create(@RequestBody CreateUserRequest request) { }

    @PutMapping("/{id}")           // PUT /api/v1/users/123
    public UserDto update(@PathVariable Long id, @RequestBody UpdateUserRequest request) { }

    @DeleteMapping("/{id}")        // DELETE /api/v1/users/123
    public void delete(@PathVariable Long id) { }
}

Расширенные параметры

Пример
@GetMapping(value = "/users", headers = "X-API-VERSION=2")    // по заголовку
@PostMapping(consumes = MediaType.MULTIPART_FORM_DATA_VALUE)  // по Content-Type
@GetMapping(produces = MediaType.APPLICATION_XML_VALUE)       // по Accept

На собеседовании: покажите знание shortcut-аннотаций и параметров маппинга. Частая ошибка – маппинг нескольких методов на один URL + HTTP-метод (IllegalStateException).