Creando un Spring Boot @RestController

En este espacio daré una breve explicación con un ejemplo práctico de como generar un Controlador de tipo @RestController con Spring Boot.

Un controlador de tipo @RestController permite generar servicios web Restful, con solo la anotación @RestController, la anotación por sí sola no te permitirá generar las acciones (endpoints) pero si le indica a Spring Boot que genere el Bean específico para generar servicios web, habilitando la clase para recibir las peticiones web y generar las respuestas a estas peticiones.

Puede encontrar el ejemplo de la aplicación en el repositorio de GitHub lab-spring-api-1

Entorno

  • Spring Boot versión 2.5.3
  • JDK versión 11
  • Maven versión 3.6.3

Dependencias

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-webflux</artifactId>
    <version>${spring-boot-version}</version>
</dependency>

Creación de @RestController

En la clase HelloController se aprecia la anotación @RestController encima de la declaración de la clase, indicando que esta clase se comportara como un servicio web, con esto spring boot preparará todas las dependencias y comportamientos necesarios para que podamos unas las acciones (endpoints) en esta clase.

@RestController
public class HelloController {

}

Crear el servicio web con una acción (endpoint) tipo GET

Para poder darle uso a la anotación @RestController debemos también declarar un método en donde le indiquemos a Spring Boot que deseamos ejecutar una acción que puede ser cualquiera de los verbos usados en los servicios Rest (GET, POST, DELETE, etc).

En este caso usaremos el verbo GET, para esto Spring Boot proporciona la anotación @GetMapping, aunque tenemos otras opciones como @RequestMapping``pero por simplicidad usaremos el@GetMapping`.

Antes de usar la anotación @GetMapping definamos el método sayHello() que nos devuelva un String con el valor "Hello there!!!".

public String sayHello(){

       return "Hello there!!!";

}

Ahora incluyamos la anotación @GetMapping para indicarle a Spring Boot que ejecute este metodo cuando reciba una petición de tipo GET.

@GetMapping
public String sayHello(){

       return "Hello there!!!";

}

Listo ahora estamos preparados para ejecutar la aplicación.

Ejecutamos mvn spring-boot:run para iniciar nuestra aplicación con maven y el plugin de Spring Boot.

Deberíamos ver algo como esto.

[INFO] <<< spring-boot-maven-plugin:2.5.3:run (default-cli) < test-compile @ hello-lab1 <<<
[INFO] 
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.5.3:run (default-cli) @ hello-lab1 ---
[INFO] Attaching agents: []

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.5.3)

2021-08-07 16:02:21.574  INFO 3029476 --- [           main] com.hvs.api.hello.HelloApplication       : Starting HelloApplication using Java 11.0.11 on cotetec099 with PID 3029476 (/home/hmartinez/projects/labs/lab-api-1/target/classes started by hmartinez in /home/hmartinez/projects/labs/lab-api-1)
2021-08-07 16:02:21.576  INFO 3029476 --- [           main] com.hvs.api.hello.HelloApplication       : No active profile set, falling back to default profiles: default
2021-08-07 16:02:22.558  INFO 3029476 --- [           main] o.s.b.web.embedded.netty.NettyWebServer  : Netty started on port 8080
2021-08-07 16:02:22.570  INFO 3029476 --- [           main] com.hvs.api.hello.HelloApplication       : Started HelloApplication in 1.34 seconds (JVM running for 1.636)

Ahora vamos a nuestro navegador de preferencia y colocamos la URL http:localhost:8080/ y deberíamos obtener en pantalla la frase "Hello there!!!"

hell2.jpg

Conclusión

En este caso práctico logramos ver que con algunas anotaciones Spring Boot nos permite crear servicos web de una manera rápida y sencilla, es importante recordar que este ejemplo se simplificó en su mayor expresión para enfocar el uso de las anotaciones @RestController y @GetMapping.