Ответ
@RestController — это удобная комбинация двух аннотаций Spring MVC, предназначенная для упрощения создания RESTful веб-сервисов.
Что она объединяет?
@Controller: Помечает класс как компонент MVC, способный обрабатывать HTTP-запросы.@ResponseBody: Автоматически применяется ко всем методам класса, указывая, что возвращаемое значение должно быть напрямую сериализовано в тело HTTP-ответа (обычно в JSON/XML), а не использоваться для поиска представления (View).
Ключевое отличие от @Controller: |
@Controller |
@RestController |
|---|---|---|
| Возвращает имя представления (View) для рендеринга HTML. | Возвращает данные (DTO, сущность), которые сразу конвертируются в JSON/XML. | |
Для REST-методов требует дополнительной аннотации @ResponseBody. |
Все методы по умолчанию ведут себя как с @ResponseBody. |
Пример использования:
// Классический REST-контроллер
@RestController // = @Controller + @ResponseBody на уровне класса
@RequestMapping("/api/products")
public class ProductApiController {
@GetMapping
public List<Product> getAllProducts() {
// Возвращаемый List<Product> автоматически конвертируется в JSON
return productService.findAll();
}
@PostMapping
@ResponseStatus(HttpStatus.CREATED) // Можно задать статус ответа
public Product createProduct(@RequestBody Product product) {
return productService.save(product);
}
}
Когда использовать?
- При разработке REST API или микросервисов, где клиент ожидает структурированные данные (JSON/XML).
- Когда не требуется server-side рендеринг HTML-страниц.
Итог: @RestController — это стандартный и лаконичный способ объявления REST-контроллеров в Spring, избавляющий от необходимости постоянно ставить @ResponseBody.