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