Sobes.tech
Junior

Quelle est la différence entre RestController et Controller dans Spring?

sobes.tech IA

Réponse de l'IA

@Controller marque la classe comme contrôleur Spring MVC. Cette classe retourne généralement des noms de vues, qui sont ensuite traités par les résolveurs de vues pour afficher l'interface utilisateur (par exemple, des pages HTML). @Controller est souvent utilisé pour créer des applications web avec rendu côté serveur.

@RestController est une variante spécialisée de @Controller. Elle ajoute automatiquement l'annotation @ResponseBody à chaque méthode. Cela signifie que les méthodes de @RestController retournent par défaut des données (par exemple, JSON ou XML), plutôt que des noms de vues. @RestController est idéal pour créer des services web RESTful qui fournissent des données aux clients (par exemple, applications frontend ou autres services).

Différence principale :

  • @Controller : Retourne des noms de vues.
  • @RestController : Retourne des données (ajoute automatiquement @ResponseBody).

Exemple de @Controller :

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Retourne le nom de la vue
    }
}

Exemple de @RestController :

@RestController
public class DataController {

    @GetMapping("/data")
    public Map<String, String> getData() {
        Map<String, String> response = new HashMap<>();
        response.put("status", "success");
        response.put("message", "Data retrieved");
        return response; // Retourne un Map qui sera converti en JSON
    }
}