Ответ
Контроллер (Controller) в паттерне MVC выступает посредником между View (Представлением) и Model (Моделью). Его основная задача — обработка пользовательского ввода и координация потока данных.
Основные обязанности (на примере Spring MVC):
- Маршрутизация HTTP-запросов — определение, какой метод контроллера должен обработать запрос.
- Валидация и преобразование входных данных — проверка параметров запроса, десериализация JSON/XML в объекты.
- Вызов бизнес-логики — обращение к сервисному слою (Model).
- Подготовка ответа — выбор представления, сериализация данных, установка HTTP-статусов.
Пример REST-контроллера на Spring:
@RestController // Объединяет @Controller и @ResponseBody
@RequestMapping("/api/books")
public class BookController {
@Autowired
private BookService bookService; // Ссылка на слой бизнес-логики
// Обработка GET-запроса
@GetMapping("/{id}")
public ResponseEntity<BookDto> getBook(@PathVariable Long id) {
BookDto book = bookService.findById(id);
return ResponseEntity.ok(book); // HTTP 200 с телом
}
// Обработка POST-запроса с валидацией
@PostMapping
public ResponseEntity<BookDto> createBook(
@Valid @RequestBody CreateBookRequest request) {
BookDto created = bookService.create(request);
return ResponseEntity
.created(URI.create("/api/books/" + created.getId())) // HTTP 201
.body(created);
}
}
Принцип "Тонкого контроллера": Контроллер должен быть максимально простым — только маршрутизация и преобразование данных. Вся бизнес-логика должна находиться в сервисном слое (Model).