Назад к вопросам
Junior
229
questionbank
В чем заключается разница между @Controller и @RestController в Spring Framework?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
@Controller предназначен для маркировки класса как компонента контроллера в MVC-архитектуре Spring. Часто используется для обработки веб-запросов и возвращения ModelAndView или имени представления.
@RestController - это специализированная версия @Controller. Он сочетает в себе @Controller и @ResponseBody, указывая, что возвращаемое значение методов должно автоматически преобразовываться в формат, подходящий для HTTP-ответа (например, JSON или XML). Чаще всего используется для создания RESTful веб-сервисов.
Основное отличие:
@Controller: ВозвращаетModelAndViewили имя представления, которое затем обрабатывается шаблонизатором.@RestController: Возвращает данные напрямую (по умолчанию в JSON/XML), которые отправляются обратно клиенту. Нет необходимости в@ResponseBodyнад каждым методом.
Пример:
// Использование @Controller
@Controller
public class ViewController {
@GetMapping("/view")
public String showView() {
return "myview"; // Возвращает имя представления
}
}
// Использование @RestController
@RestController
public class RestDataController {
@GetMapping("/data")
public MyData getData() {
return new MyData("Hello", "World"); // Возвращает данные, которые конвертируются в JSON
}
static class MyData {
private String field1;
private String field2;
public MyData(String field1, String field2) {
this.field1 = field1;
this.field2 = field2;
}
public String getField1() { return field1; }
public String getField2() { return field2; }
}
}