Spring @Controller и @RestController Аннотации
1. обзор
В этом кратком руководстве мы обсудим разницу между аннотациями@Controller и@RestController в Spring MVC.
Первая аннотация используется для традиционных контроллеров Spring и является частью фреймворка в течение очень долгого времени.
Аннотация@RestController была введена в Spring 4.0 для упрощения создания веб-служб RESTful. It’s a convenience annotation that combines @Controller and @ResponseBody - что избавляет от необходимости аннотировать каждый метод обработки запросов класса контроллера аннотацией@ResponseBody.
Дальнейшее чтение:
Spring RequestMapping
Spring @RequestMapping - базовый пример, @RequestParam, @PathVariable, отображение заголовка
2. Пружина 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. Пружина 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.
Полный исходный код примера доступен вthe GitHub project; это проект Maven, поэтому его можно импортировать и использовать как есть.