1) Що таке Controller і навіщо він потрібен
Controller — це клас, який “слухає” HTTP-запити від клієнта (браузер, Postman, мобільний застосунок) і вирішує: який метод треба виконати.
- Controller працює з HTTP: URL, методи (GET/POST), статуси, JSON.
- Controller викликає Service, бо логіка має бути там.
- Controller повертає відповідь клієнту (зазвичай JSON).
Якщо сервіс — це “мозок”, то контролер — це “диспетчер”: прийняв запит → передав у правильне місце → віддав результат.
2) REST API: що це (дуже коротко і по суті)
REST — це стиль побудови API, де ми працюємо з ресурсами. Тут ресурс — це користувачі: /users.
- GET — отримати дані (читання)
- POST — створити нові дані (додавання)
- PUT/PATCH — оновити
- DELETE — видалити
На цій практичній ми робимо базові 2 операції: читання всіх і створення нового користувача.
3) Розбір анотацій контролера по скріну
@RestController — каже Spring: “це REST-контролер”.
- Spring створить bean цього класу.
- Методи будуть повертати дані напряму у відповідь (зазвичай JSON), а не HTML-сторінки.
@RequestMapping("/users") — базовий шлях для всіх методів у класі.
- Тобто всі маршрути всередині контролера будуть починатися з /users.
Важливо для студентів:
@RequestMapping("/users") + @GetMapping = GET /users
@RequestMapping("/users") + @PostMapping = POST /users
4) Dependency Injection у контролері (як і в сервісі)
Контролер не створює сервіс вручну. Він отримує його через конструктор:
- Spring створює UserService і “вколює” його в контролер.
- final — сервіс не змінюється під час роботи.
5) Ендпоінт №1: GET /users
- @GetMapping означає: метод викликається, коли приходить HTTP GET.
- Шлях береться з @RequestMapping("/users"), тому це GET /users.
- Метод повертає List<User> — Spring перетворює це у JSON.
hooking для уваги студентів: “ви повертаєте Java-об’єкти, а клієнт бачить JSON”.
Приклад відповіді (умовно):
6) Ендпоінт №2: POST /users
- @PostMapping — метод викликається, коли приходить HTTP POST.
- @RequestBody — взяти тіло запиту (JSON) і перетворити в Java-об’єкт User.
- Метод повертає створеного користувача (часто вже з id після збереження).
Приклад запиту в Postman:
Приклад відповіді (умовно):
7) Як Spring “робить JSON” (щоб пояснити простими словами)
Spring використовує JSON-бібліотеку (зазвичай Jackson), яка:
- вміє перетворити Java-об’єкт у JSON (серіалізація);
- і JSON у Java-об’єкт (десеріалізація).
Ключова умова: щоб JSON правильно складався, об’єкт має мати поля + геттери/сеттери (або record), інакше дані “не вийдуть назовні”.
8) Чому контролер має бути “тонкий” (важливий принцип)
Контролер не повинен:
- писати складну логіку (if-else на 50 рядків);
- лазити напряму в базу (викликати repository напряму);
- приймати рішення бізнес-рівня (“можна чи не можна створити користувача”).
Контролер повинен:
- прийняти дані з HTTP (path/body/query);
- викликати сервіс;
- повернути відповідь.
Це дисципліна, яка відрізняє “пет-проєкт на коліні” від нормального коду, який переживе рік розвитку.
9) Що буде далі (логічне продовження)
- Додати валідацію (наприклад, @Valid + Bean Validation).
- Додати ендпоінти: GET /users/{id}, PUT/PATCH /users/{id}, DELETE /users/{id}.
- Додати правильні HTTP-статуси (201 Created, 400 Bad Request, 404 Not Found).
Підсумок: ми створили REST-контролер, який публікує API для користувачів. Тепер клієнт може працювати з нашою системою навіть без frontend — через HTTP-запити (Postman/браузер).