Короткий ответ
@Controller — MVC-контроллер классических веб-приложений: его методы возвращают имя представления (JSP или шаблон Thymeleaf), в которое передаётся модель. @RestController — специализированная аннотация для REST-сервисов: комбинация @Controller + @ResponseBody, поэтому методы сразу возвращают данные.
Как это работает подробнее
Методы @RestController возвращают данные (как правило, JSON или XML), которые автоматически сериализуются в тело ответа с помощью HttpMessageConverter (например, Jackson). Ни @ResponseBody на каждом методе, ни view resolver для этого не нужны.
- Ключевое отличие:
@Controllerвозвращает представление (view), а@RestController— данные (JSON/XML). - Сфера применения:
@Controller— классические веб-приложения на Spring MVC,@RestController— REST API и микросервисы. - Возврат данных из
@Controller: чтобы отдать JSON или XML, к методу нужно добавить@ResponseBody.
Пример кода
EmployeeController.java
@RestController
@RequestMapping("/employees")
public class EmployeeController {
@GetMapping
public List<String> getEmployees() {
return List.of("Alice", "Bob");
}
}Что использовать на практике
- Для REST API и микросервисов всегда используйте
@RestController— в Spring Boot это стандарт создания REST-эндпоинтов. - Для страниц MVC-приложения берите
@Controllerи возвращайте имя представления. - Если метод
@Controllerдолжен вернуть данные, помечайте его@ResponseBody.