Перейти к основному содержимому

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

· 2 мин. чтения

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