Аннотации Spring @Controller и @RestController

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, поэтому его можно импортировать и использовать как есть.