Рубрики
Без рубрики

Аннотации Spring @Controller и @RestController

Узнайте о различиях между аннотациями @Controller и @RestController в Spring MVC.

Автор оригинала: baeldung.

1. Обзор

В этом кратком руководстве мы обсудим разницу между @Controller и @RestController аннотациями в Spring MVC.

Мы можем использовать первую аннотацию для традиционных контроллеров Spring, и она была частью фреймворка в течение очень долгого времени.

Spring 4.0 представила аннотацию @RestController , чтобы упростить создание веб-сервисов RESTful. Это удобная аннотация , которая объединяет @Controller и @ResponseBody , что устраняет необходимость аннотировать каждый метод обработки запросов класса controller аннотацией @ResponseBody .

Дальнейшее чтение:

Весеннее сопоставление запросов

Аннотация Spring @RequestParam

2. Пружинный контроллер MVC @

Мы можем аннотировать классические контроллеры с помощью аннотации @Controller . Это просто специализация класса @Component , которая позволяет нам автоматически определять классы реализации с помощью сканирования пути к классам.

Обычно мы используем @Controller в сочетании с аннотацией @RequestMapping для методов обработки запросов.

Давайте рассмотрим краткий пример контроллера Spring MVC:

@Controller
@RequestMapping("books")
public class SimpleBookController {

    @GetMapping("/{id}", produces = "application/json")
    public @ResponseBody Book getBook(@PathVariable int id) {
        return findBookById(id);
    }

    private Book findBookById(int id) {
        // ...
    }
}

Мы аннотировали метод обработки запросов с помощью @ResponseBody . Эта аннотация позволяет автоматически сериализовать возвращаемый объект в ответ Http|/.

3. Spring MVC @RestController

@RestController – это специализированная версия контроллера. Он включает в себя аннотации @Controller и @ResponseBody и, как следствие, упрощает реализацию контроллера:

@RestController
@RequestMapping("books-rest")
public class SimpleBookRestController {
    
    @GetMapping("/{id}", produces = "application/json")
    public Book getBook(@PathVariable int id) {
        return findBookById(id);
    }

    private Book findBookById(int id) {
        // ...
    }
}

Контроллер снабжен аннотацией с @RestController аннотация; следовательно, @ResponseBody не требуется.

Каждый метод обработки запросов класса контроллера автоматически сериализует возвращаемые объекты в HttpResponse .

4. Заключение

В этой статье мы рассмотрели классические и специализированные контроллеры REST, доступные в Spring Framework.

Полный исходный код примеров доступен в проекте GitHub . Это проект Maven, поэтому его можно импортировать и использовать как есть.