Ποια είναι η διαφορά μεταξύ των annotations RestController και Controller στο Spring;
sobes.tech AI
Απάντηση από AI
@Controller χρησιμοποιείται για τον ορισμό ελεγκτών που χειρίζονται αιτήματα ιστού. Οι μέθοδοι σε μια τέτοια κλάση συνήθως επιστρέφουν ονόματα προβολών (view names), τα οποία στη συνέχεια αποδίδει το Spring MVC.
@RestController είναι μια εξειδικευμένη έκδοση του @Controller. Συνδυάζει το @Controller και το @ResponseBody. Αυτό σημαίνει ότι οι μέθοδοι σε μια τέτοια κλάση, κατά προεπιλογή, δεν επιστρέφουν ονόματα προβολών, αλλά αντικείμενα που στη συνέχεια σειριοποιούνται αυτόματα σε JSON ή XML (ανάλογα με τη διαμόρφωση) και αποστέλλονται πίσω στον πελάτη στο σώμα της απάντησης HTTP.
Η βασική διαφορά είναι ότι το @Controller προορίζεται για τη δημιουργία web εφαρμογών με παραδοσιακή σερβερ-πλευρική απόδοση (αρχιτεκτονική MVC), ενώ το @RestController για τη δημιουργία RESTful web υπηρεσιών, όπου οι απαντήσεις παρουσιάζονται με τη μορφή δεδομένων.
Μπορεί να πει κανείς ότι το @RestController είναι ζάχαρη σύνταξης για το @Controller συν το @ResponseBody.
// Παράδειγμα χρήσης του @Controller
@Controller
@RequestMapping("/pages")
public class ViewController {
@GetMapping("/welcome")
public String showWelcomePage() {
return "welcome"; // Επιστρέφει το όνομα της προβολής (welcome.html, welcome.jsp κ.λπ.)
}
}
// Παράδειγμα χρήσης του @RestController
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// Επιστρέφει ένα αντικείμενο User που θα σειριοποιηθεί αυτόματα σε JSON/XML
return userService.findById(id);
}
}