Guía definitiva para entender @RestController en Spring

| Última modificación: 23 de septiembre de 2024 | Tiempo de Lectura: 4 minutos

Algunos de nuestros reconocimientos:

Premios KeepCoding

A muchos les resulta complejo entender cómo construir servicios REST en Java. Por eso, la anotación @RestController ha llegado al rescate. Ten por seguro que, la explicación de este post te resultará tan fácil de entender que, lograrás dominar el @RestController en menos de lo que te imaginas.

qué es RestController

¿Qué es @RestController?

Por si no lo sabías, la anotación @RestController fue una de las mejoras más significativas que llegó con Spring 4, haciendo que la creación de servicios REST fuese mucho más fácil. Las funciones de @Controller y @ResponseBody se combinan de tal manera que, puedes procesar las solicitudes HTTP y devolver respuestas en formato JSON o XML directamente, sin necesidad de escribir código extra para convertir o mapear los datos.

Dicho de forma sencilla, con @RestController construyes servicios REST de manera más fácil y efectiva, porque Spring se encarga de todos los detalles técnicos por ti.

Cómo funciona @RestController

Presta mucha atención a los pasos que debes seguir para crear un servicio REST con esta anotación:

Configura Maven

Antes que nada, asegúrate de que tu proyecto Spring esté configurado correctamente. Lo que debes hacer es, añadir las dependencias necesarias en el archivo pom.xml de Maven, recuerda que estas incluyen el framework de Spring y otras librerías como Jackson para poder manejar la conversión de objetos a JSON.

<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>4.1.7.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>2.5</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-core</artifactId>
<version>2.4.2</version>
</dependency>

Con estas dependencias, tu aplicación logrará manejas las solicitudes HTTP y convertirá automáticamente las respuestas a JSON.

Configura el Dispatcher Servlet

Lo que sigue es configurar el Dispatcher Servlet en el archivo web.xml. Ten en cuenta que, este servlet es el encargado de interceptar las solicitudes HTTP y redirigirlas a los controladores correspondientes.

<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">

<servlet>
<servlet-name>ServletSpring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/config/applicationContext.xml</param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name>ServletSpring</servlet-name>
<url-pattern>*.json</url-pattern>
</servlet-mapping>
</web-app>

Te darás cuenta de que, al tener esta configuración, cualquier solicitud que termine en .json va a ser manejada por el controlador REST que tu hayas definido.

Configura el ApplicationContext

El archivo applicationContext.xml define cómo Spring escaneará y registrará los controladores que implementen la anotación @RestController. En este paso configura la inyección de dependencias y activa el escaneo automático de componentes.

<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/context
http://www.springframework.org/schema/mvc">

<mvc:annotation-driven />
<context:component-scan base-package="com.example.controller" />
</beans>

Vas a ver que Spring buscará de forma automática todas las clases anotadas con

@RestController dentro del paquete especificado.

Crea el controlador REST

Cuando tu proyecto esté configurado, debes proceder a crear el controlador que manejará las solicitudes REST. Es aquí donde usaremos la anotación @RestController.

package com.example.controller;

import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class PersonaController {

@GetMapping("/personas")
public List<Persona> listaPersonas() {
List<Persona> lista = new ArrayList<>();
lista.add(new Persona("Juan", 25));
lista.add(new Persona("Ana", 30));
return lista;
}
}

Lo que ocurrió fue que creamos un controlador que maneja las solicitudes GET a la URL /personas. De modo que, cuando se hace una petición a esta URL, lo que obtenemos es la lista de personas en formato JSON.

Así es como Spring se encarga de manera automática de la conversión de objetos a JSON, gracias a la dependencia de Jackson que usamos al principio.

Petición al servicio REST

Para terminar solo haz una petición a la URL en la que has mapeado tu servicio REST. En este caso, al acceder a http://localhost:8080/SpringApp/personas.json, obtendrás el siguiente resultado en formato JSON:

[
{"nombre": "Juan", "edad": 25},
{"nombre": "Ana", "edad": 30}
]

Ventajas de usar @RestController en Spring

A medida que uses @RestController podrás darte cuenta de las grandes ventajas que te ofrece en cuanto al desarrollo de servicios REST:

  • Simplificación del código: Ya no tendrás la necesidad de combinar varias anotaciones como antes, ya que @RestController engloba la funcionalidad de @Controller y @ResponseBody.
  • Conversión automática a JSON: No tendrás que escribir código adicional porque, gracias a la integración con Jackson, Spring convierte automáticamente los objetos Java a JSON.
  • Manejo eficiente de solicitudes HTTP: Será más sencillo crear servicios flexibles y completos porque tiene soporte para diferentes métodos HTTP (GET, POST, PUT, DELETE).

La creación de aplicaciones escalables nunca fue tan sencilla. Con @RestController, lograrás un código simplificado y mejorarás la productividad. Además, tu aprendizaje no termina aquí. Para que alcances un nivel superior en conceptos como @RestController, hemos creado el Bootcamp de Java.

En este programa intensivo, no solo aprenderás a crear servicios REST, sino que también te sumergirás en tecnologías como Spring Boot, Hibernate y más. ¡Transforma tu carrera con uno de los sectores con mayor demanda laboral, altos salarios y estabilidad profesional! ¡Apúntate hoy y da el primer paso hacia un futuro exitoso en la programación!

Ramón Maldonado

Full Stack Developer y Responsable de Formación base en KeepCoding.

Posts más leídos

¡CONVOCATORIA ABIERTA!

Java y Spring Boot

Full Stack Bootcamp

Clases en Directo | Profesores en Activo | Temario 100% actualizado