Las anotaciones Spring @Controller y @RestController

1. Información general

En este tutorial rápido, discutiremos la diferencia entre las anotaciones @Controller y @RestController en Spring MVC.

La primera anotación se utiliza para los controladores Spring tradicionales y ha sido parte del marco durante mucho tiempo.

La anotación @RestController se introdujo en Spring 4.0 para simplificar la creación de servicios web RESTful. Es una anotación de conveniencia que combina @Controller y @ResponseBody , lo que elimina la necesidad de anotar cada método de manejo de solicitudes de la clase de controlador con la anotación @ResponseBody .

2. Spring MVC @Controller

Los controladores clásicos se pueden anotar con la anotación @Controller . Esto es simplemente una especialización de la clase @Component y permite que las clases de implementación se detecten automáticamente a través del escaneo de classpath.

@Controller generalmente se usa en combinación con una anotación @RequestMapping que se usa en los métodos de manejo de solicitudes.

Veamos un ejemplo rápido del 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) { // ... } } 

El método de manejo de solicitudes está anotado con @ResponseBody . Esta anotación permite la serialización automática del objeto de retorno en HttpResponse .

3. Spring MVC @RestController

@RestController es una versión especializada del controlador. Incluye las anotaciones @Controller y @ResponseBody y, como resultado, simplifica la implementación del 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) { // ... } } 

El controlador está anotado con la anotación @RestController , por lo tanto, el @ResponseBody no es necesario.

Cada método de manejo de solicitudes de la clase de controlador serializa automáticamente los objetos de retorno en HttpResponse .

4. Conclusión

En este artículo, vimos los controladores REST clásicos y especializados disponibles en Spring Framework.

El código fuente completo para el ejemplo está disponible en el proyecto GitHub; este es un proyecto de Maven, por lo que se puede importar y usar tal cual.