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 пропонує три головні способи отримати дані від клієнта:
  1. @PathVariable: Для частин самого шляху (/users/5).
  2. @RequestParam: Для фільтрів у кінці URL (/users?city=Kyiv).
  3. @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 виглядає так:
  1. Створюєте DTO (клас для даних).
  2. Пишете RestController з потрібними @Mapping.
  3. Використовуєте сервіси для бізнес-логіки.
  4. Повертаєте ResponseEntity із результатом.



Остання зміна: середа 20 травня 2026 12:17 PM