Mi a különbség a RestController és a Controller annotációk között a Spring-ben?
Válasz az MI-től
sobes.tech MI
@Controller webkéréseket kezelő vezérlők meghatározására szolgál. Egy ilyen osztályban lévő metódusok általában a nézetek nevét adják vissza (view names), amelyeket a Spring MVC ezután renderel.
Az @RestController az @Controller egy specializált változata. Összekapcsolja az @Controller és az @ResponseBody-t. Ez azt jelenti, hogy egy ilyen osztályban lévő metódusok alapértelmezés szerint nem adnak vissza nézetneveket, hanem objektumokat, amelyeket automatikusan JSON vagy XML formátumba serializálnak (a konfigurációtól függően), és visszaküldenek a kliensnek az HTTP-válasz törzsében.
A fő különbség az, hogy az @Controller hagyományos szerveroldali rendereléssel webalkalmazások létrehozására szolgál (MVC-architektúra), míg az @RestController RESTful webszolgáltatások létrehozására, ahol a válaszok adatként jelennek meg.
Mondhatjuk, hogy az @RestController szintaktikus cukor az @Controller és az @ResponseBody kombinációjára.
// Az `@Controller` használatának példája
@Controller
@RequestMapping("/pages")
public class ViewController {
@GetMapping("/welcome")
public String showWelcomePage() {
return "welcome"; // A nézet neve (welcome.html, welcome.jsp stb.)
}
}
// Az `@RestController` használatának példája
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/users/{id}")
public User getUserById(@PathVariable Long id) {
// Automatikusan serializált User objektum JSON/XML formátumban
return userService.findById(id);
}
}