Назад к вопросам
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; }
    }
}