Назад к вопросам
Junior
69
questionbank
В чем разница между RestController и Controller в Spring?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
@RestController — это специализированная версия @Controller, объединяющая @Controller и @ResponseBody.
Различия:
| Особенность | @Controller |
@RestController |
|---|---|---|
| Назначение | Используется для веб-приложений, возвращающих представления (HTML). | Используется для создания RESTful веб-сервисов, возвращающих данные (JSON, XML). |
@ResponseBody |
Требует явного использования @ResponseBody на каждом методе или классе, чтобы возвращать данные, а не представление. |
Включает @ResponseBody по умолчанию для всех методов класса, возвращающих данные. |
| Возвращаемое значение | Обычно возвращает имя представления (String), которое резолвер представления обрабатывает для отображения HTML. | Обычно возвращает объект Java, который преобразуется в JSON или XML с помощью конвертера сообщений. |
Пример @Controller:
// Пример Controller, возвращающего представление
@Controller
@RequestMapping("/view")
public class ViewController {
@GetMapping("/greeting")
public String showGreetingPage(Model model) {
model.addAttribute("message", "Привет, мир!");
return "greeting"; // Возвращает имя представления
}
}
Пример @RestController:
// Пример RestController, возвращающего JSON
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/user/{id}")
public User getUser(@PathVariable Long id) {
// Логика получения пользователя из БД
return new User(id, "Иван"); // Возвращает объект User, который Spring преобразует в JSON
}
}