As anotações Spring @Controller e @RestController

As anotações Spring @Controller e @RestController

1. Visão geral

Neste tutorial rápido, discutiremos a diferença entre as anotações@Controllere@RestController no Spring MVC.

A primeira anotação é usada para os controladores Spring tradicionais e faz parte da estrutura há muito tempo.

A anotação@RestController foi introduzida no Spring 4.0 para simplificar a criação de serviços da Web RESTful. It’s a convenience annotation that combines @Controller and @ResponseBody - que elimina a necessidade de anotar cada método de tratamento de solicitação da classe do controlador com a anotação@ResponseBody.

Leitura adicional:

Solicitação de primavera

Spring @RequestMapping - Exemplo básico, @RequestParam, @PathVariable, mapeamento de cabeçalho

Read more

Anotação Spring @RequestParam

Um guia detalhado para a anotação @RequestParam de Spring

Read more

2. Spring MVC@Controller

Os controladores clássicos podem ser anotados com a anotação@Controller. Isso é simplesmente uma especialização da classe@Component e permite que as classes de implementação sejam detectadas automaticamente por meio da varredura do caminho de classe.

@Controller é normalmente usado em combinação com uma anotação@RequestMapping usada em métodos de tratamento de solicitação.

Vejamos um exemplo rápido do controlador 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) {
        // ...
    }
}

O método de tratamento da solicitação é anotado com@ResponseBody. Essa anotação permite a serialização automática do objeto de retorno emHttpResponse.

3. Spring MVC@RestController

@RestController é uma versão especializada do controlador. Inclui as anotações@Controllere@ResponseBody e, como resultado, simplifica a implementação do controlador:

@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) {
        // ...
    }
}

O controlador é anotado com a anotação@RestController, portanto,@ResponseBody não é necessário.

Cada método de tratamento de solicitação da classe do controlador serializa automaticamente os objetos de retorno emHttpResponse.

4. Conclusão

Neste artigo, vimos os controladores REST clássicos e especializados disponíveis no Spring Framework.

O código-fonte completo para o exemplo está disponível emthe GitHub project; este é um projeto Maven, portanto, pode ser importado e usado como está.