Sobes.tech
Junior

Was ist der Unterschied zwischen RestController und Controller in Spring?

sobes.tech KI

Antwort von AI

@Controller kennzeichnet die Klasse als Spring MVC Controller. Diese Klasse gibt in der Regel View-Namen zurück, die dann von View-Resolvern verarbeitet werden, um die Benutzeroberfläche anzuzeigen (z.B. HTML-Seiten). @Controller wird häufig verwendet, um Webanwendungen mit serverseitigem Rendering zu erstellen.

@RestController ist eine spezialisierte Variante von @Controller. Es fügt automatisch die Annotation @ResponseBody zu jeder Methode hinzu. Das bedeutet, dass die Methoden in @RestController standardmäßig Daten (z.B. JSON oder XML) zurückgeben, anstatt View-Namen. @RestController eignet sich perfekt für die Erstellung von RESTful Webservices, die Daten an Clients bereitstellen (z.B. Frontend-Anwendungen oder andere Dienste).

Hauptunterschied:

  • @Controller: Gibt View-Namen zurück.
  • @RestController: Gibt Daten zurück (fügt automatisch @ResponseBody hinzu).

Beispiel für @Controller:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Gibt den Namen der View zurück
    }
}

Beispiel für @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; // Gibt eine Map zurück, die in JSON umgewandelt wird
    }
}