1. Обзор
В этом кратком руководстве мы обсудим разницу между аннотациями @Controller
и @RestController
в Spring MVC.
Мы можем использовать первую аннотацию для традиционных контроллеров Spring, и она уже очень давно является частью фреймворка.
В Spring 4.0 появилась аннотация @RestController
, чтобы упростить создание веб-сервисов RESTful. Это удобная аннотация, объединяющая @Controller
и @ResponseBody
, что устраняет необходимость аннотировать каждый метод обработки запросов класса контроллера аннотацией @ResponseBody
.
2. Spring MVC @контроллер
Мы можем аннотировать классические контроллеры с помощью аннотации @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, поэтому его можно импортировать и использовать как есть.