Вопросы 21-30 для разработчиков
Ответ: @RestController — это специализированная аннотация Spring, используемая для создания RESTful веб-сервисов. Она объединяет функциональность @Controller и @ResponseBody, позволяя каждому обработчику (handler method) возвращать данные напрямую как тело HTTP-ответа вместо рендеринга представления.
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@GetMapping
public List<Employee> getEmployees() {
return employeeService.getEmployees();
}
}
Ответ: Список различий между @Controller и @RestController приведён ниже.
| Критерий | @Controller | @RestController |
|---|---|---|
| Назначение | Используется для создания Spring MVC контроллеров | Используется для создания контроллеров RESTful веб-сервисов |
| Тип ответа | Возвращает View (JSP, Thymeleaf, HTML) | Возвращает данные (JSON, XML и т.д.) |
| @ResponseBody | Должно быть добавлено явно | Включено автоматически |
| Основное применение | Веб-приложения | REST API и микросервисы |
| View Resolver | Требуется | Не требуется |
| Сериализация данных | Вручную, через @ResponseBody | Автоматическая |
Примечание: Обе аннотации обрабатывают запросы, но @RestController в первую очередь ориентирован на возврат данных при построении API.
Ответ: @RequestMapping и @GetMapping оба используются для сопоставления входящих HTTP-запросов с методами контроллера. Основная разница в том, что @RequestMapping может обрабатывать любой HTTP-метод, а @GetMapping предназначен только для HTTP GET-запросов.
| Критерий | @RequestMapping | @GetMapping |
|---|---|---|
| Назначение | Сопоставляет запросы для любого HTTP-метода | Сопоставляет только HTTP GET-запросы |
| HTTP-методы | GET, POST, PUT, DELETE, PATCH и т.д. | Только GET |
| Появился в | Spring Framework | Spring Framework 4.3 |
| Синтаксис | @RequestMapping(method = RequestMethod.GET) | @GetMapping |
| Читаемость | Более многословный | Более чистый и лаконичный |
| Рекомендуется для | Общего маппинга запросов | GET-операций |
Ответ: @SpringBootApplication — это комбинированная аннотация, которая конфигурирует и запускает Spring Boot приложение, тогда как @EnableAutoConfiguration только включает автоматическую конфигурацию. Ниже список различий.
| Критерий | @SpringBootApplication | @EnableAutoConfiguration |
|---|---|---|
| Когда использовать | Когда нужна автоконфигурация | Когда нужна кастомизация автоконфигурации |
| Точка входа | Обычно используется в главном классе Spring Boot приложения, служит точкой входа | Может использоваться в любом классе конфигурации или вместе с @SpringBootApplication |
| Сканирование компонентов | Включает аннотацию @ComponentScan для сканирования компонентов | Не выполняет сканирование компонентов самостоятельно |
| Пример | @SpringBootApplication public class MyApplication { public static void main(String[] args) { SpringApplication.run(MyApplication.class, args); } } | @Configuration @EnableAutoConfiguration public class MyConfiguration { } |
Ответ: Spring Profiles похожи на разные сценарии для приложения в зависимости от окружения.
Чтобы использовать Spring Profiles, нужно задать свойство spring.profiles.active для указания, какой profile использовать.
Ответ: WAR (Web Application Archive) развёртывается на внешнем веб-сервере, таком как Tomcat или Jetty, тогда как embedded container упаковывает веб-сервер внутри приложения, делая его автономным и исполняемым.
| Критерий | Развёртывание WAR | Embedded Container |
|---|---|---|
| Упаковка | WAR-файл | Исполняемый JAR |
| Сервер | Требуется внешний сервер приложений (Tomcat, WildFly, WebLogic и т.д.) | Встроенный Tomcat, Jetty или Undertow |
| Развёртывание | Развёртывание WAR вручную на сервере | Запуск напрямую через java -jar |
| Конфигурация | Конфигурация внешнего сервера | Конфигурация внутри приложения |
| Запуск | Немного медленнее | Быстрый запуск |
| Портируемость | Зависит от установки сервера | Полностью автономный |
| Лучше всего подходит для | Традиционных корпоративных приложений | Микросервисов и cloud-native приложений |
| Поддержка в Spring Boot | Поддерживается | Рекомендуется |
Ответ: Spring Boot Actuator — это готовый для продакшена модуль, который предоставляет возможности мониторинга, управления и эксплуатации для Spring Boot приложений. Он открывает несколько встроенных endpoint'ов, которые помогают отслеживать состояние приложения (health), производительность, метрики и конфигурацию.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
Ответ: Шаги для включения Actuator в Spring Boot:
Ответ: @ComponentScan используется, чтобы указать Spring IoC контейнеру просканировать заданные пакеты на предмет управляемых Spring компонентов, таких как @Component, @Service, @Repository и @Controller. Найденные классы автоматически регистрируются как Spring beans.
Ответ:
@RequestMapping используется для сопоставления входящих HTTP-запросов с классами контроллеров или методами-обработчиками. Он поддерживает маппинг на основе URL, HTTP-метода, параметров запроса, заголовков и типов содержимого.
@RestController — это специализированная аннотация, используемая для создания RESTful веб-сервисов. Она объединяет @Controller и @ResponseBody, поэтому каждый метод-обработчик возвращает тело ответа напрямую вместо
@RestController = @Controller + @ResponseBody