Цікава інформація 2.3
1. Як працює Spring MVC під капотом
Коли ви вводите URL у браузері, запит не потрапляє одразу у ваш код. Його зустрічає DispatcherServlet.
- DispatcherServlet — це "рецепція" готелю. Ви не йдете самі шукати свій номер; ви підходите до стійки, а адміністратор дивиться у журнал і каже, до якого "контролера" вам іти.
- Цей процес називається Handler Mapping (пошук потрібного методу за URL).
2. @Controller vs @RestController
Це базове питання на будь-якій співбесіді.
- @Controller: Використовується для традиційних сайтів. Він повертає назву сторінки (View). Наприклад, ви повертаєте рядок
"index", і Spring шукає файлindex.html. - @RestController: Це
@Controller+@ResponseBody. Він використовується для API. Він повертає чисті дані (зазвичай JSON).
@RestController
@RequestMapping("/api/books")
public class BookController {
@GetMapping("/{id}")
public Book getBook(@PathVariable Long id) {
return new Book(id, "Spring in Action"); // Об'єкт автоматично стане JSON
}
}
3. Обробка вхідних даних
Spring пропонує три головні способи отримати дані від клієнта:
- @PathVariable: Для частин самого шляху (
/users/5). - @RequestParam: Для фільтрів у кінці URL (
/users?city=Kyiv). - @RequestBody: Для великих об'єктів, які приходять у форматі JSON (зазвичай у POST запитах).
4. ResponseEntity: Повний контроль
Просто повертати об'єкт — це зручно, але професійно повертати ResponseEntity. Він дозволяє керувати не тільки даними, а й HTTP-статусом.
@PostMapping
public ResponseEntity<User> createUser(@RequestBody User user) {
// Логіка збереження
return ResponseEntity
.status(HttpStatus.CREATED) // Код 201
.header("My-Custom-Header", "Spring-Demo")
.body(user);
}
5. Валідація даних
Ви не повинні довіряти клієнту. Якщо поле "email" обов'язкове, Spring може перевірити це автоматично за допомогою анотацій.
- Додаємо
@Validу контролері. - Додаємо правила в самому DTO/Entity:
public class UserDTO {
@NotNull
@Size(min = 2, message = "Ім'я занадто коротке")
private String name;
@Email
private String email;
}
6. Глобальна обробка помилок
Замість того, щоб писати
try-catch у кожному методі, ми створюємо один клас-перехоплювач — @ControllerAdvice.Це як "служба безпеки", яка ловить усі виключення (Exceptions), що вилетіли з будь-якого контролера, і оформлює їх у красиву JSON-відповідь для клієнта.
🛠️ Практичний підсумок
Розробка веб-додатка на Spring Boot виглядає так:
- Створюєте DTO (клас для даних).
- Пишете RestController з потрібними
@Mapping. - Використовуєте сервіси для бізнес-логіки.
- Повертаєте ResponseEntity із результатом.
Остання зміна: середа 20 травня 2026 12:17 PM