Ключевое отличие @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?
Ключевое отличие @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 — специализированный контроллер для 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.