Назад к вопросам
Junior
68
questionbank

В чем заключается разница между аннотациями RestController и Controller в Spring?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

@Controller используется для определения контроллеров, которые обрабатывают веб-запросы. Методы в таком классе обычно возвращают имена представлений (view names), которые Spring MVC затем рендерит.

@RestController является специализированной версией @Controller. Он объединяет @Controller и @ResponseBody. Это означает, что методы в таком классе по умолчанию не возвращают имена представлений, а напрямую возвращают объекты, которые затем автоматически сериализуются в JSON или XML (в зависимости от конфигурации) и отправляются обратно клиенту в теле HTTP-ответа.

Таким образом, основное различие заключается в том, что @Controller предназначен для создания веб-приложений с традиционным серверным рендерингом представлений (MVC-архитектура), а @RestController — для создания RESTful веб-сервисов, где ответы представляются в виде данных.

Можно сказать, что @RestController это синтаксический сахар для @Controller плюс @ResponseBody.

// Пример использования @Controller
@Controller
@RequestMapping("/pages")
public class ViewController {

    @GetMapping("/welcome")
    public String showWelcomePage() {
        return "welcome"; // Возвращает имя представления (welcome.html, welcome.jsp и т.д.)
    }
}

// Пример использования @RestController
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/users/{id}")
    public User getUserById(@PathVariable Long id) {
        // Возвращает объект User, который будет автоматически сериализован в JSON/XML
        return userService.findById(id);
    }
}