В чем разница между RestController и Controller в Spring?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
@Controller отмечает класс как контроллер Spring MVC. Этот класс обычно возвращает имена представлений (view names), которые затем обрабатываются view resolvers для отображения пользовательского интерфейса (например, HTML страниц). @Controller часто используется для создания веб-приложений с серверным рендерингом.
@RestController является специализированным вариантом @Controller. Он автоматически добавляет к каждому методу аннотацию @ResponseBody. Это означает, что методы @RestController по умолчанию возвращают данные (например, JSON или XML), а не имена представлений. @RestController идеально подходит для создания RESTful веб-сервисов, которые предоставляют данные клиентам (например, фронтенд-приложениям или другим сервисам).
Основное отличие:
@Controller: Возвращает имена представлений.@RestController: Возвращает данные (автоматически добавляет@ResponseBody).
Пример @Controller:
@Controller
public class ViewController {
@GetMapping("/hello")
public String sayHello(Model model) {
model.addAttribute("message", "Hello, world!");
return "helloView"; // Возвращает имя представления
}
}
Пример @RestController:
@RestController
public class DataController {
@GetMapping("/data")
public Map<String, String> getData() {
Map<String, String> response = new HashMap<>();
response.put("status", "success");
response.put("message", "Data retrieved");
return response; // Возвращает Map, которая будет преобразована в JSON
}
}