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

1. Общ преглед

В този бърз урок ще обсъдим разликата между @Controller и @RestController анотациите в Spring MVC.

Първата анотация се използва за традиционните контролери Spring и е част от рамката от много дълго време.

В @RestController анотацията е въведена през пролетта на 4.0 да се опрости създаването на спокоен уеб услуги. Това е удобна анотация, която комбинира @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, така че може да бъде импортиран и използван както е.