Adnotările Spring @Controller și @RestController

1. Prezentare generală

In acest tutorial rapid, vom discuta diferența dintre @Controller și @RestController adnotări în Spring MVC.

Prima adnotare este utilizată pentru controlerele tradiționale de primăvară și face parte din cadru de foarte mult timp.

@RestController adnotarea a fost introdus în primăvară 4.0 pentru a simplifica crearea de servicii web odihnitor. Este o adnotare de comoditate care combină @Controller și @ResponseBody - ceea ce elimină necesitatea adnotării fiecărei metode de tratare a cererilor din clasa controlerului cu adnotarea @ResponseBody .

2. Spring MVC @Controller

Controlerele clasice pot fi adnotate cu adnotarea @Controller . Aceasta este pur și simplu o specializare a clasei @Component și permite claselor de implementare să fie autodetectate prin scanarea classpath.

@Controller este de obicei utilizat în combinație cu o adnotare @RequestMapping utilizată la metodele de manipulare a cererii.

Să vedem un exemplu rapid de controler 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) { // ... } } 

Metoda de gestionare a cererilor este adnotată cu @ResponseBody . Această adnotare permite serializarea automată a obiectului returnat în HttpResponse .

3. Spring MVC @RestController

@RestController este o versiune specializată a controlerului. Acesta include @Controller și @ResponseBody adnotări și , ca rezultat, simplifică implementarea controlerului:

@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) { // ... } } 

Controlerul este adnotat cu adnotarea @RestController , prin urmare nu este necesar @ResponseBody .

Fiecare metodă de tratare a cererilor din clasa controlerului serializează automat obiectele returnate în HttpResponse .

4. Concluzie

În acest articol, am văzut controlerele REST clasice și specializate disponibile în Spring Framework.

Codul sursă complet pentru exemplu este disponibil în proiectul GitHub; acesta este un proiect Maven, deci poate fi importat și utilizat ca atare.