Sobes.tech
Junior

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

sobes.tech Süni İntellekt

AI-dan cavab

@Controller veb sorğularını işləyən nəzarətçiləri müəyyən etmək üçün istifadə olunur. Belə bir sinifdəki metodlar adətən görünüş adlarını (view names) qaytarır, sonra Spring MVC onları render edir.

@RestController isə @Controller-ın ixtisaslaşdırılmış versiyasıdır. O, @Controller@ResponseBody-ni birləşdirir. Bu, belə bir sinifdəki metodların standart olaraq görünüş adları qaytarmadığı, əvəzinə obyektləri, onlar avtomatik olaraq JSON və ya XML-ə seriallaşdırılır (konfiqurasiyadan asılı olaraq) və HTTP cavab gövdəsində müştəriyə göndərilir.

Əsas fərq odur ki, @Controller ənənəvi server tərəfi render ilə veb tətbiqləri yaratmaq üçün nəzərdə tutulub, @RestController isə RESTful veb xidmətləri yaratmaq üçün, cavablar məlumat şəklində təqdim olunur.

@RestController — bu @Controller@ResponseBody üçün sintaktik şəkərdir.

// @Controller istifadə nümunəsi
@Controller
@RequestMapping("/pages")
public class ViewController {

    @GetMapping("/welcome")
    public String showWelcomePage() {
        return "welcome"; // Görünüş adını qaytarır (welcome.html, welcome.jsp və s.)
    }
}

// @RestController istifadə nümunəsi
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        // JSON/XML-ə avtomatik seriallaşdırılan obyekt
        return userService.findById(id);
    }
}