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

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

Sobes Copilot

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

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

sobes.tech AI

@Controller используется для обработки HTTP-запросов в Spring MVC и обычно возвращает имя представления (например, JSP, Thymeleaf), которое будет отображено на клиенте. Он работает совместно с ViewResolver.

@RestController является комбинацией @Controller и @ResponseBody. Он указывает, что возвращаемое значение метода должно быть преобразовано непосредственно в тело HTTP-ответа. Чаще всего используется для создания RESTful веб-сервисов, возвращающих данные в формате JSON или XML.

Ключевые отличия:

  • Возвращаемое значение: @Controller возвращает имя представления, @RestController возвращает данные.
  • @ResponseBody: @RestController неявно включает @ResponseBody для всех методов.
  • Цель: @Controller подходит для традиционных веб-приложений с серверным рендерингом, @RestController — для создания RESTful API.

Пример @Controller:

// Пример Controller
@Controller
@RequestMapping("/web")
public class WebController {

    @GetMapping("/hello")
    public String sayHello() {
        return "hello"; // Возвращает имя представления (например, hello.html)
    }
}

Пример @RestController:

// Пример RestController
@RestController
@RequestMapping("/api")
public class ApiController {

    @GetMapping("/hello")
    public Map<String, String> sayHelloRest() {
        Map<String, String> response = new HashMap<>();
        response.put("message", "Hello from REST API!");
        return response; // Возвращает JSON объект
    }
}