Mi a különbség a RestController és a Controller között a Spring-ben?
sobes.tech MI
Válasz az MI-től
A @Controller a Spring MVC vezérlőként jelöli meg az osztályt. Ez az osztály általában névként ad vissza nézeteket, amelyeket ezután a nézet feloldók dolgoznak fel a felhasználói felület megjelenítéséhez (például HTML oldalak). A @Controller gyakran használatos szerveroldali rendereléssel rendelkező webalkalmazások létrehozásához.
A @RestController a @Controller egy specializált változata. Automatikusan hozzáadja minden metódushoz a @ResponseBody annotációt. Ez azt jelenti, hogy a @RestController-ben lévő metódusok alapértelmezés szerint adatokat (például JSON vagy XML) adnak vissza, nem névként a nézetekhez. A @RestController ideális RESTful webszolgáltatások létrehozásához, amelyek adatokat szolgáltatnak az ügyfeleknek (például frontend alkalmazásoknak vagy más szolgáltatásoknak).
Fő különbség:
@Controller: névként ad vissza nézeteket.@RestController: adatokat ad vissza (automatikusan hozzáadja a@ResponseBody-t).
@Controller példa:
@Controller
public class ViewController {
@GetMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, world!");
return "helloView"; // névként visszaadja a nézetet
}
}
@RestController példa:
@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; // Map-et ad vissza, amit JSON-re konvertálnak
}
}