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

В чем разница между RestController и Controller в Spring?

Sobes Copilot

Получайте ответы в реальном времени

Ответ от нейросети

sobes.tech AI

@RestController — это специализированная версия @Controller, объединяющая @Controller и @ResponseBody.

Различия:

Особенность @Controller @RestController
Назначение Используется для веб-приложений, возвращающих представления (HTML). Используется для создания RESTful веб-сервисов, возвращающих данные (JSON, XML).
@ResponseBody Требует явного использования @ResponseBody на каждом методе или классе, чтобы возвращать данные, а не представление. Включает @ResponseBody по умолчанию для всех методов класса, возвращающих данные.
Возвращаемое значение Обычно возвращает имя представления (String), которое резолвер представления обрабатывает для отображения HTML. Обычно возвращает объект Java, который преобразуется в JSON или XML с помощью конвертера сообщений.

Пример @Controller:

// Пример Controller, возвращающего представление
@Controller
@RequestMapping("/view")
public class ViewController {

    @GetMapping("/greeting")
    public String showGreetingPage(Model model) {
        model.addAttribute("message", "Привет, мир!");
        return "greeting"; // Возвращает имя представления
    }
}

Пример @RestController:

// Пример RestController, возвращающего JSON
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/user/{id}")
    public User getUser(@PathVariable Long id) {
        // Логика получения пользователя из БД
        return new User(id, "Иван"); // Возвращает объект User, который Spring преобразует в JSON
    }
}