Sobes.tech
Junior

Aký je rozdiel medzi RestController a Controller v Spring?

sobes.tech AI

Odpoveď od AI

@Controller označuje triedu ako kontrolér Spring MVC. Táto trieda zvyčajne vracia názvy pohľadov, ktoré sú následne spracované resolvermi pohľadov na zobrazenie používateľského rozhrania (napríklad HTML stránky). @Controller sa často používa na vytváranie webových aplikácií s renderovaním na strane servera.

@RestController je špecializovaná verzia @Controller. Automaticky pridáva anotáciu @ResponseBody ku každej metóde. To znamená, že metódy v @RestController predvolene vracajú dáta (napríklad JSON alebo XML), nie názvy pohľadov. @RestController je ideálny na vytváranie RESTful webových služieb, ktoré poskytujú dáta klientom (napríklad frontendovým aplikáciám alebo iným službám).

Hlavný rozdiel:

  • @Controller: Vracia názvy pohľadov.
  • @RestController: Vracia dáta (automaticky pridáva @ResponseBody).

Príklad @Controller:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // Vracia názov pohľadu
    }
}

Prí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; // Vracia Map, ktorá bude konvertovaná na JSON
    }
}