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.