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

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

1. обзор

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

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

Аннотация@RestController была введена в Spring 4.0 для упрощения создания веб-служб RESTful. It’s a convenience annotation that combines @Controller and @ResponseBody - что избавляет от необходимости аннотировать каждый метод обработки запросов класса контроллера аннотацией@ResponseBody.

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

Spring RequestMapping

Spring @RequestMapping - базовый пример, @RequestParam, @PathVariable, отображение заголовка

Read more

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

Подробное руководство по аннотации Spring @RequestParam

Read more

2. Пружина MVC@Controller

Классические контроллеры могут быть аннотированы аннотацией@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. Эта аннотация позволяет автоматически сериализовать возвращаемый объект вHttpResponse.

3. Пружина 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.

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