В чем назначение аннотации @RestController в Spring?

«В чем назначение аннотации @RestController в Spring?» — вопрос из категории Spring, который задают на 10% собеседований Java Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

@RestController — это удобная комбинация двух аннотаций Spring MVC, предназначенная для упрощения создания RESTful веб-сервисов.

Что она объединяет?

  1. @Controller: Помечает класс как компонент MVC, способный обрабатывать HTTP-запросы.
  2. @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.