Ποια είναι η διαφορά μεταξύ RestController και Controller στο Spring;
sobes.tech AI
Απάντηση από AI
Το @Controller σηματοδοτεί την κλάση ως ελεγκτή Spring MVC. Αυτή η κλάση επιστρέφει συνήθως ονόματα προβολών, τα οποία στη συνέχεια επεξεργάζονται από τους επιλυτές προβολής για την εμφάνιση του περιβάλλοντος χρήστη (π.χ. σελίδες HTML). Το @Controller χρησιμοποιείται συχνά για τη δημιουργία web εφαρμογών με σερβερ-πλευρή απόδοση.
Το @RestController είναι μια εξειδικευμένη έκδοση του @Controller. Προσθέτει αυτόματα την ανότατη @ResponseBody σε κάθε μέθοδο. Αυτό σημαίνει ότι οι μέθοδοι του @RestController επιστρέφουν δεδομένα (π.χ. JSON ή XML) από προεπιλογή, και όχι ονόματα προβολών. Το @RestController είναι ιδανικό για τη δημιουργία RESTful web υπηρεσιών που παρέχουν δεδομένα στους πελάτες (π.χ. frontend εφαρμογές ή άλλες υπηρεσίες).
Βασική διαφορά:
@Controller: Επιστρέφει ονόματα προβολών.@RestController: Επιστρέφει δεδομένα (προσθέτει αυτόματα@ResponseBody).
Παράδειγμα @Controller:
@Controller
public class ViewController {
@GetMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, world!");
return "helloView"; // Επιστρέφει το όνομα της προβολής
}
}
Παράδειγμα @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; // Επιστρέφει ένα Map που θα μετατραπεί σε JSON
}
}