Gymterview
junior

Для чего нужны @RequestParam, @PathVariable, @RequestBody и @ResponseBody?

Эти аннотации определяют, откуда Spring извлекает данные запроса и куда помещает данные ответа.

Аннотация Откуда берёт данные Пример URL
@PathVariable Из URL-пути /api/users/42
@RequestParam Из query-параметров /api/users?status=ACTIVE
@RequestBody Из тела запроса (JSON) POST с JSON body
@ResponseBody В тело ответа (JSON) Автоматически в @RestController
Пример
@PutMapping("/api/departments/{deptId}/users/{userId}")
public ResponseEntity<UserDto> updateUser(
        @PathVariable Long deptId,
        @PathVariable Long userId,
        @RequestParam(required = false) boolean notify,
        @RequestBody @Valid UpdateUserRequest request) {
    // ...
}
Пример
// GET /api/users?status=ACTIVE&page=0&size=20
@GetMapping("/api/users")
public Page<UserDto> findUsers(
        @RequestParam String status,
        @RequestParam(defaultValue = "0") int page,
        @RequestParam(defaultValue = "20") int size,
        @RequestParam(required = false) String search) { }

На собеседовании: покажите умение комбинировать эти аннотации. Частая ошибка – забыть @RequestBody для POST/PUT (параметр будет null) или отправлять form-data вместо JSON.