Les annotations Spring @Controller et @RestController

1. Vue d'ensemble

Dans ce tutoriel rapide, nous discuterons de la différence entre les annotations @Controller et @RestController dans Spring MVC.

La première annotation est utilisée pour les contrôleurs Spring traditionnels et fait partie du framework depuis très longtemps.

L' annotation @RestController a été introduite dans Spring 4.0 pour simplifier la création de services Web RESTful. C'est une annotation pratique qui combine @Controller et @ResponseBody - ce qui élimine le besoin d'annoter chaque méthode de gestion des demandes de la classe de contrôleur avec l' annotation @ResponseBody .

2. Spring MVC @Controller

Les contrôleurs classiques peuvent être annotés avec l' annotation @Controller . Il s'agit simplement d'une spécialisation de la classe @Component et permet aux classes d'implémentation d'être détectées automatiquement via l'analyse du chemin de classe.

@Controller est généralement utilisé en combinaison avec une annotation @RequestMapping utilisée sur les méthodes de traitement des demandes.

Voyons un exemple rapide du contrôleur 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) { // ... } } 

La méthode de gestion des demandes est annotée avec @ResponseBody . Cette annotation permet la sérialisation automatique de l'objet de retour dans HttpResponse .

3. Spring MVC @RestController

@RestController est une version spécialisée du contrôleur. Il inclut les annotations @Controller et @ResponseBody et, par conséquent, simplifie l'implémentation du contrôleur:

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

Le contrôleur est annoté avec l' annotation @RestController , par conséquent, @ResponseBody n'est pas requis.

Chaque méthode de gestion de demande de la classe de contrôleur sérialise automatiquement les objets de retour dans HttpResponse .

4. Conclusion

Dans cet article, nous avons vu les contrôleurs REST classiques et spécialisés disponibles dans Spring Framework.

Le code source complet de l'exemple est disponible dans le projet GitHub; il s'agit d'un projet Maven, il peut donc être importé et utilisé tel quel.