Чем @RestController отличается от @Controller в Spring?

Ключевое отличие @RestController от @Controller Обе аннотации Spring применяются для создания веб-контроллеров @Controller используется в MVC и возвращает view — например, HTML или JSP @RestController объединяет…

Короткий ответ

Что ответить на собеседовании

Ключевое отличие @RestController от @Controller Обе аннотации Spring применяются для создания веб-контроллеров @Controller используется в MVC и возвращает view — например, HTML или JSP @RestController объединяет возможности @Controller и @ResponseBody Ответы из @RestController автоматически преобразуются в JSON/XML При использовании @Controller аннотацию @ResponseBody для REST API необходимо добавлять явно Назначение у них различается: @Controller — веб-страницы @RestController — REST-сервисы (API) Благодаря этому REST API можно создавать без дополнительных аннотаций

Подробный разбор

Ответ с пояснениями

Ключевое отличие @RestController от @Controller

  • Обе аннотации Spring применяются для создания веб-контроллеров
  • @Controller используется в MVC и возвращает view — например, HTML или JSP
  • @RestController объединяет возможности @Controller и @ResponseBody
  • Ответы из @RestController автоматически преобразуются в JSON/XML
  • При использовании @Controller аннотацию @ResponseBody для REST API необходимо добавлять явно
  • Назначение у них различается: @Controller — веб-страницы @RestController — REST-сервисы (API)
  • Благодаря этому REST API можно создавать без дополнительных аннотаций

Итак, @RestController — специализированный контроллер для REST, тогда как @Controller предназначен для классического MVC с представлениями.

Подробный ответ

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

@RestController и @Controller — аннотации Spring Framework, обозначающие компоненты для обработки HTTP-запросов. Их назначение различается. @RestController — специализированная аннотация, объединяющая @Controller и @ResponseBody. Поэтому возвращаемые объектами данные автоматически сериализуются в JSON или XML. @Controller чаще выбирают для MVC-приложений: его методы возвращают имена представлений (например, JSP или Thymeleaf), а данные передаются через модель.

Основные моменты

  • Автоматическая сериализация: @RestController сам преобразует возвращаемые объекты в JSON/XML, что удобно при разработке REST API. В случае с @Controller для такого же поведения на методах нужно явно указывать @ResponseBody.
  • Использование контекста: @Controller лучше подходит традиционным веб-приложениям со слоем View, тогда как @RestController позволяет создавать API без разработки дополнительных view-шаблонов.
  • Конвенции и удобство: Начиная с Spring 4.0, @RestController удобно применять в микросервисах и API: код становится проще, а число необходимых аннотаций сокращается.

Практический контекст

В рабочих проектах для backend SPA-приложения — например, на React или Angular — либо мобильного клиента обычно выбирают @RestController, поскольку таким клиентам требуется JSON-ответ. Для веб-приложений с отдельными страницами и серверным рендерингом используют @Controller вместе с шаблонизаторами, такими как Thymeleaf.

Практика в реальном времени

Подготовьтесь к следующему собеседованию

Interview Boost учитывает вакансию, резюме и технологии и помогает сформулировать ответ прямо во время интервью.

Начать подготовку