В чем разница между RestController и Controller?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
@Controller используется для обработки веб-запросов и возвращает имена представлений (.jsp, .html и т.п.). Он часто используется в MVC-архитектуре, где отвечает за взаимодействие с моделью данных и выбор представления для отображения.
@RestController является специализированной версией @Controller. Он автоматически преобразует возвращаемые значения методов в формат HTPP-ответа, обычно в JSON или XML. Это происходит благодаря автоматическому включению @ResponseBody для каждого метода внутри контроллера. @RestController чаще используется для создания RESTful веб-сервисов, которые предоставляют данные в чистом виде, а не возвращают HTML-страницы.
| Характеристика | @Controller |
@RestController |
|---|---|---|
| Предназначение | Обработка веб-запросов, возврат представлений | Создание RESTful веб-сервисов, возврат данных (JSON, XML) |
@ResponseBody |
Требует явного использования для каждого метода, возвращающего данные | Автоматически применяется ко всем методам |
| Возвращаемый тип | Имя представления (String), ModelAndView | Данные (объекты, List и т.д.), автоматически сериализуются |
Пример:
@Controller:
// Пример использования @Controller
@Controller
@RequestMapping("/view")
public class ViewController {
@GetMapping("/hello")
public String sayHello() {
return "hello"; // Возвращает имя представления (например, hello.jsp)
}
}
@RestController:
// Пример использования @RestController
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/user")
public User getUser() {
// Предположим, есть класс User
return new User("John Doe", 30); // Возвращает JSON представление объекта User
}
}