Sobes.tech
Junior

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