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
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á.