Sobes.tech
Junior

Jaký je rozdíl mezi RestController a Controller ve Springu?

sobes.tech AI

Odpověď od AI

@Controller označuje třídu jako kontroler Spring MVC. Tato třída obvykle vrací názvy pohledů, které jsou pak zpracovány resolvery pohledů pro zobrazení uživatelského rozhraní (například HTML stránek). @Controller se často používá k vytváření webových aplikací s serverovým renderováním.

@RestController je specializovaná varianta @Controller. Automaticky přidává anotaci @ResponseBody ke každé metodě. To znamená, že metody v @RestController vracejí výchozí data (například JSON nebo XML), nikoli názvy pohledů. @RestController je ideální pro vytváření RESTful webových služeb, které poskytují data klientům (například frontendovým aplikacím nebo jiným službám).

Hlavní rozdíl:

  • @Controller: Vrací názvy pohledů.
  • @RestController: Vrací data (automaticky přidává @ResponseBody).

Příklad @Controller:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Vrací název pohledu
    }
}

Příklad @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; // Vrací Map, která bude převedena na JSON
    }
}