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
}
}