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