Sobes.tech
Junior

Care este diferența dintre RestController și Controller în Spring?

sobes.tech AI

Răspuns de la AI

@Controller marchează clasa ca fiind un controler Spring MVC. Această clasă returnează de obicei nume de vizualizări, care sunt apoi procesate de rezolvatoarele de vizualizări pentru afișarea interfeței utilizatorului (de exemplu, pagini HTML). @Controller este adesea folosit pentru crearea de aplicații web cu randare pe server.

@RestController este o variantă specializată a @Controller. Adaugă automat adnotarea @ResponseBody la fiecare metodă. Aceasta înseamnă că metodele din @RestController returnează implicit date (de exemplu, JSON sau XML), nu nume de vizualizări. @RestController este ideal pentru crearea de servicii web RESTful care furnizează date clienților (de exemplu, aplicații frontend sau alte servicii).

Diferența principală:

  • @Controller: returnează nume de vizualizări.
  • @RestController: returnează date (adaugă automat @ResponseBody).

Exemplu de @Controller:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Returnează numele vizualizării
    }
}

Exemplu de @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; // Returnează un Map care va fi convertit în JSON
    }
}