1. Обзор
В этом кратком руководстве мы обсудим разницу между аннотациями @Controller и @RestController в Spring MVC.
Первая аннотация используется для традиционных контроллеров Spring и очень долгое время является частью структуры.
@RestController аннотаций была введена в Spring 4.0 для упрощения создания веб - служб RESTful. Это удобная аннотация, которая сочетает в себе @Controller и @ResponseBody, что устраняет необходимость аннотировать каждый метод обработки запросов класса контроллера аннотацией @ResponseBody .
2. Spring MVC @Controller
Классические контроллеры можно аннотировать с помощью аннотации @Controller . Это просто специализация класса @Component, которая позволяет автоматически определять классы реализации посредством сканирования пути к классам.
@Controller обычно используется в сочетании с аннотацией @RequestMapping, используемой в методах обработки запросов.
Давайте посмотрим на быстрый пример контроллера Spring MVC:
@Controller @RequestMapping("books") public class SimpleBookController { @GetMapping("/{id}", produces = "application/json") public @ResponseBody Book getBook(@PathVariable int id) { return findBookById(id); } private Book findBookById(int id) { // ... } }
Метод обработки запроса аннотируется @ResponseBody . Эта аннотация позволяет автоматически сериализовать возвращаемый объект в HttpResponse .
3. Spring MVC @RestController
@RestController - это специализированная версия контроллера. Он включает аннотации @Controller и @ResponseBody и, как следствие, упрощает реализацию контроллера:
@RestController @RequestMapping("books-rest") public class SimpleBookRestController { @GetMapping("/{id}", produces = "application/json") public Book getBook(@PathVariable int id) { return findBookById(id); } private Book findBookById(int id) { // ... } }
Контроллер снабжен аннотацией @RestController , поэтому @ResponseBody не требуется.
Каждый метод обработки запросов класса контроллера автоматически сериализует возвращаемые объекты в HttpResponse .
4. Вывод
В этой статье мы увидели классические и специализированные контроллеры REST, доступные в Spring Framework.
Полный исходный код примера доступен в проекте GitHub; это проект Maven, поэтому его можно импортировать и использовать как есть.