Les annotations Spring @Controller et @RestController

Les annotations Spring @Controller et @RestController

1. Vue d'ensemble

Dans ce rapide didacticiel, nous aborderons 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. It’s a convenience annotation that combines @Controller and @ResponseBody - ce qui élimine le besoin d'annoter chaque méthode de traitement des demandes de la classe de contrôleur avec l'annotation@ResponseBody.

Lectures complémentaires:

Spring RequestMapping

Spring @RequestMapping - Exemple de base, @RequestParam, @PathVariable, mappage d'en-tête

Read more

Spring @RequestParam Annotation

Un guide détaillé de l'annotation @RequestParam de Spring

Read more

2. Ressort 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 lesHttpResponse.

3. Ressort MVC@RestController

@RestController est une version spécialisée du contrôleur. Il inclut les annotations@Controller et@ResponseBody et, par conséquent, simplifie la mise en œuvre 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, donc le@ResponseBody n'est pas requis.

Chaque méthode de gestion des demandes de la classe de contrôleur sérialise automatiquement les objets de retour enHttpResponse.

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 enthe GitHub project; il s'agit d'un projet Maven, il peut donc être importé et utilisé tel quel.