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.