Sobes.tech
Junior

Spring-ში RestController და Controller-ს შორის რა განსხვავებაა?

sobes.tech AI

პასუხი AI-სგან

@Controller კლასს როგორც Spring MVC კონტროლერს აღნიშნავს. ეს კლასი ჩვეულებრივ აბრუნებს ხედის სახელებს, რომლებიც შემდეგ ხედის გამჭვირვალე საშუალებებით მუშავდება და მომხმარებლის ინტერფეისს აჩვენებს (მაგალითად, HTML გვერდებს). @Controller ხშირად გამოიყენება სერვერზე დაფუძნებული რენდერინგით ვებ-აპლიკაციების შესაქმნელად.

@RestController არის @Controller-ის სპეციალიზებული ვარიანტი. ის ავტომატურად ემატება @ResponseBody თითოეულ მეთოდზე. ეს ნიშნავს, რომ @RestController-ის მეთოდები ჩვეულებრივ აბრუნებენ მონაცემებს (მაგალითად, JSON ან XML), არა ხედის სახელებს. @RestController იდეალურია RESTful ვებ სერვისების შესაქმნელად, რომლებიც მონაცემებს აწვდიან მომხმარებლებს (მაგალითად, ფრონტენდის აპლიკაციებს ან სხვა სერვისებს).

ძირითადი განსხვავება:

  • @Controller: აბრუნებს ხედის სახელებს.
  • @RestController: აბრუნებს მონაცემებს (ავტომატურად ემატება @ResponseBody).

@Controller მაგალითი:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // ხედის სახელია
    }
}

@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; // Map, რომელიც გარდაიქმნება JSON-ის
    }
}