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