Анотації 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, тому його можна імпортувати та використовувати як є.