Sobes.tech
Junior
166

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