Sobes.tech
Junior

Jaka jest różnica między RestController a Controller w Spring?

sobes.tech AI

Odpowiedź od AI

@Controller oznacza klasę jako kontroler Spring MVC. Ta klasa zazwyczaj zwraca nazwy widoków, które następnie są przetwarzane przez rozwiązywacze widoków w celu wyświetlenia interfejsu użytkownika (np. strony HTML). @Controller jest często używany do tworzenia aplikacji internetowych z renderowaniem po stronie serwera.

@RestController jest specjalistycznym wariantem @Controller. Automatycznie dodaje adnotację @ResponseBody do każdej metody. Oznacza to, że metody w @RestController domyślnie zwracają dane (np. JSON lub XML), a nie nazwy widoków. @RestController jest idealny do tworzenia RESTful usług internetowych, które dostarczają dane klientom (np. aplikacjom frontendowym lub innym usługom).

Główna różnica:

  • @Controller: Zwraca nazwy widoków.
  • @RestController: Zwraca dane (automatycznie dodaje @ResponseBody).

Przykład @Controller:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Zwraca nazwę widoku
    }
}

Przykład @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; // Zwraca Map, która zostanie przekształcona na JSON
    }
}