Annotazioni Spring @Controller e @RestController

1. Panoramica

In questo breve tutorial, discuteremo la differenza tra le annotazioni @Controller e @RestController in Spring MVC.

La prima annotazione viene utilizzata per i controller Spring tradizionali e fa parte del framework da molto tempo.

L' annotazione @RestController è stata introdotta nella Spring 4.0 per semplificare la creazione di servizi Web RESTful. È un'annotazione comoda che combina @Controller e @ResponseBody , che elimina la necessità di annotare ogni metodo di gestione delle richieste della classe controller con l' annotazione @ResponseBody .

2. Spring MVC @Controller

I controller classici possono essere annotati con l' annotazione @Controller . Questa è semplicemente una specializzazione della classe @Component e consente alle classi di implementazione di essere rilevate automaticamente tramite la scansione del percorso di classe.

@Controller viene in genere utilizzato in combinazione con un'annotazione @RequestMapping utilizzata sui metodi di gestione delle richieste.

Vediamo un rapido esempio del controller 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) { // ... } } 

Il metodo di gestione delle richieste è annotato con @ResponseBody . Questa annotazione consente la serializzazione automatica dell'oggetto restituito in HttpResponse .

3. Spring MVC @RestController

@RestController è una versione specializzata del controller. Include le annotazioni @Controller e @ResponseBody e, di conseguenza, semplifica l'implementazione del controller:

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

Il controller è annotato con l' annotazione @RestController , quindi @ResponseBody non è richiesta.

Ogni metodo di gestione delle richieste della classe controller serializza automaticamente gli oggetti restituiti in HttpResponse .

4. Conclusione

In questo articolo, abbiamo visto i controller REST classici e specializzati disponibili in Spring Framework.

Il codice sorgente completo per l'esempio è disponibile nel progetto GitHub; questo è un progetto Maven, quindi può essere importato e utilizzato così com'è.