Sobes.tech
Junior

Spring-də RestController və Controller arasındakı fərq nədir?

sobes.tech Süni İntellekt

AI-dan cavab

@Controller Spring MVC nəzarətçisini kimi sinifə işarə edir. Bu sinif adətən görünüş adlarını qaytarır və bunlar daha sonra görünüş həll edənlər tərəfindən işlənir və istifadəçi interfeysini göstərir (məsələn, HTML səhifələri). @Controller adətən server tərəfi render ilə veb tətbiqləri yaratmaq üçün istifadə olunur.

@RestController isə @Controller-ın ixtisaslaşdırılmış variantıdır. O, hər bir metod üçün avtomatik olaraq @ResponseBody əlavə edir. Bu, @RestController-dakı metodların standart olaraq məlumatlar (məsələn, JSON və ya XML) qaytardığı, görünüş adları deyil. @RestController RESTful veb xidmətləri yaratmaq üçün idealdır və bu xidmətlər müştərilərə (məsələn, frontend tətbiqlərə və ya digər xidmətlərə) məlumatlar təqdim edir.

Əsas fərq:

  • @Controller: görünüş adlarını qaytarır.
  • @RestController: məlumatları qaytarır (avtomatik olaraq @ResponseBody əlavə edir).

@Controller nümunəsi:

@Controller
public class ViewController {

    @GetMapping("/hello")
    public String sayHello(Model model) {
        model.addAttribute("message", "Hello, world!");
        return "helloView"; // görünüş adını qaytarır
    }
}

@RestController nümunəsi:

@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; // JSON-ə çevriləcək Map qaytarır
    }
}