Назад к вопросам
Junior
158
questionbank

В чем разница между 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
    }
}