Sobes.tech
Junior

Ποια είναι η διαφορά μεταξύ 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
    }
}