В чем заключается разница между аннотациями 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);
}
}