Saltar al contenido principal

TP2.1 - Aplicación "Greeting" con Spring Boot

Objetivos​

Este trabajo práctico le permitirá:

  • Crear su primer proyecto Spring Boot con Spring Initializr
  • Configurar Visual Studio Code para el desarrollo con Spring Boot
  • Crear un controlador REST sencillo
  • Comprender la estructura de un proyecto Spring Boot
  • Resolver problemas comunes de inicio

Requisitos previos​

Antes de comenzar, asegúrese de tener instalado:

  • JDK 17 o superior
  • Visual Studio Code
  • Extensiones requeridas para VS Code:
    • Extension Pack for Java
    • Spring Boot Extension Pack
    • Maven for Java
  • Maven 3.9+ (recomendado por estabilidad)

Verificación de los requisitos previos​

# Verificar Java
java -version

# Verificar Maven
mvn -version

Parte 1: Creación del Proyecto con Spring Initializr​

Paso 1.1: Acceder a Spring Initializr​

Abra su navegador y vaya a: https://start.spring.io/

Paso 1.2: Configuración del Proyecto​

Configure su proyecto con los siguientes parámetros:

ParámetroValor
ProjectMaven
LanguageJava
Spring Boot3.2.0 (o la versión estable más reciente)
Groupcom.example
Artifactgreeting
Namegreeting
Package namecom.example.demo
PackagingJar
Java17

Paso 1.3: Añadir Dependencias​

Haga clic en "Add Dependencies" y agregue:

  • Spring Web - Para crear aplicaciones web REST

Importante: Para este TP, solo agregue Spring Web. No agregue:

  • Spring Data JPA
  • PostgreSQL Driver
  • Lombok

(Veremos estas dependencias en los próximos TPs)

Paso 1.4: Generación del Proyecto​

  1. Haga clic en el botón Generate
  2. Se descargará un archivo ZIP: greeting.zip
  3. Descomprima este archivo en su espacio de trabajo (por ejemplo: C:\workspace\greeting)

Parte 2: Apertura del Proyecto en VS Code​

Paso 2.1: Abrir el Proyecto​

  1. Inicie Visual Studio Code
  2. Menú: File → Open Folder
  3. Seleccione la carpeta greeting descomprimida
  4. VS Code detectará automáticamente el proyecto Maven

Paso 2.2: Espere la Inicialización​

VS Code va a:

  • Descargar las dependencias de Maven
  • Configurar el proyecto Java
  • Indexar los archivos

Nota: La primera vez puede tardar algunos minutos.

Paso 2.3: Estructura del Proyecto​

Debería ver la siguiente estructura:

greeting/
├── src/
│ ├── main/
│ │ ├── java/
│ │ │ └── com/example/demo/
│ │ │ └── GreetingApplication.java
│ │ └── resources/
│ │ └── application.properties
│ └── test/
├── pom.xml
└── README.md

Parte 3: Creación de las Clases​

Paso 3.1: Crear la Clase Greeting​

  1. En VS Code, haga clic derecho en src/main/java/com/example/demo
  2. Seleccione New File
  3. Nombre el archivo: Greeting.java

Código de la clase Greeting:

package com.example.demo;

public class Greeting {

private Long id;
private String content;

public Greeting(Long id, String content) {
super();
this.id = id;
this.content = content;
}

public Long getId() {
return id;
}

public String getContent() {
return content;
}

public void setId(Long id) {
this.id = id;
}

public void setContent(String content) {
this.content = content;
}
}

Paso 3.2: Crear la Clase GreetingController​

  1. En la misma carpeta, cree un nuevo archivo: GreetingController.java

Código del controlador:

package com.example.demo;

import java.util.concurrent.atomic.AtomicLong;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class GreetingController {

private static final String template = "Hello, %s!";
private final AtomicLong counter = new AtomicLong();

@GetMapping("/greeting")
public Greeting greeting(@RequestParam(value="name") String name) {
return new Greeting(counter.incrementAndGet(), String.format(template, name));
}
}

Parte 4: Verificación del pom.xml​

Paso 4.1: Abrir pom.xml​

Abra el archivo pom.xml y verifique las dependencias.

Dependencias esperadas (solo 2):

<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>

Paso 4.2: Explicación de las Dependencias​

DependenciaRol
spring-boot-starter-webProporciona todo lo necesario para crear aplicaciones web REST (Tomcat, Spring MVC, Jackson)
spring-boot-starter-testProporciona las herramientas de testing (JUnit, Mockito, etc.)

Paso 4.3: Si Tiene Dependencias Adicionales​

Si agregó por error:

  • spring-boot-starter-data-jpa
  • postgresql
  • lombok

ELIMÍNELAS del pom.xml para evitar errores.

¿Por qué? Estas dependencias requieren configuración adicional (base de datos, etc.) que no realizamos en este TP.


Parte 5: Compilación y Ejecución​

Paso 5.1: Limpiar y Compilar con Maven​

Opción A: Vía la Terminal Integrada de VS Code

  1. Abra la terminal: Terminal → New Terminal
  2. Ejecute los comandos:
mvn clean
mvn install

Opción B: Vía la Extensión Maven

  1. Abra la vista Maven (icono Maven en la barra lateral)
  2. Despliegue su proyecto
  3. Clic derecho en clean → Run
  4. Clic derecho en install → Run

Paso 5.2: Ejecutar la Aplicación​

Opción A: Vía la Terminal

mvn spring-boot:run

Opción B: Vía VS Code

  1. Abra GreetingApplication.java
  2. Haga clic en Run encima del método main
  3. O presione F5

Paso 5.3: Verificar el Inicio​

Debería ver en la consola:

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

...
Started GreetingApplication in X.XXX seconds

El servidor se inicia en el puerto 8080 por defecto.


Parte 6: Prueba de la Aplicación​

Paso 6.1: Prueba en el Navegador​

Abra su navegador y pruebe las siguientes URLs:

Prueba 1:

http://localhost:8080/greeting?name=Armstrong

Resultado esperado:

{
"id": 1,
"content": "Hello, Armstrong!"
}

Prueba 2:

http://localhost:8080/greeting?name=François

Resultado esperado:

{
"id": 2,
"content": "Hello, François!"
}

Prueba 3:

http://localhost:8080/greeting?name=Patrick

Resultado esperado:

{
"id": 3,
"content": "Hello, Patrick!"
}

Paso 6.2: Observar el Contador​

Actualice la página varias veces y observe:

  • El ID se incrementa en cada llamada
  • El contador se mantiene en memoria mientras la aplicación está en ejecución

Paso 6.3: Prueba con Postman (Opcional)​

Si tiene Postman instalado:

  1. Cree una nueva solicitud GET
  2. URL: http://localhost:8080/greeting?name=SuNombre
  3. Haga clic en Send

Parte 7: Resolución de Problemas​

Problema 1: Error de Inicio - Dependencias Faltantes​

Síntoma:

Failed to configure a DataSource: 'url' attribute is not specified

Causa: Probablemente tiene spring-boot-starter-data-jpa en su pom.xml

Solución:

Abra pom.xml y elimine estas dependencias si están presentes:

<!-- A ELIMINAR -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>

<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<scope>runtime</scope>
</dependency>

<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>

Luego reinicie:

mvn clean install
mvn spring-boot:run

Problema 2: Puerto 8080 Ya en Uso​

Síntoma:

Port 8080 was already in use.

Causa: Otra aplicación ya está usando el puerto 8080.

Solución 1: Cambiar el Puerto

Abra src/main/resources/application.properties y agregue:

server.port=8081

O si utiliza application.yml:

server:
port: 8081

Luego pruebe con: http://localhost:8081/greeting?name=Test

Solución 2: Finalizar el Proceso que Usa el Puerto 8080

En Windows:

  1. Encontrar el proceso:
netstat -ano | findstr :8080
  1. Anote el PID (Process ID) en la última columna

  2. Finalice el proceso (como administrador):

taskkill /F /PID <número_del_PID>

En macOS/Linux:

  1. Encontrar el proceso:
lsof -i :8080
  1. Finalizar el proceso:
kill -9 <PID>

Problema 3: Extensiones de VS Code Faltantes​

Síntoma: VS Code no detecta el proyecto Java

Solución:

  1. Abra la pestaña de Extensiones (Ctrl + Shift + X)
  2. Instale estas extensiones:
    • Extension Pack for Java (Microsoft)
    • Spring Boot Extension Pack (VMware)
    • Maven for Java (Microsoft)
  3. Reinicie VS Code

Problema 4: Maven No Reconocido​

Síntoma:

'mvn' is not recognized as an internal or external command

Solución:

  1. Descargue Maven: https://maven.apache.org/download.cgi
  2. Añada Maven a su PATH del sistema
  3. Reinicie la terminal
  4. Verifique: mvn -version

Parte 8: Preguntas de Comprensión​

Preguntas​

  1. ¿Qué hace la anotación @RestController?

  2. ¿Cuál es la diferencia entre @RestController y @Controller?

  3. ¿Qué significa @GetMapping("/greeting")?

  4. ¿Por qué se utiliza AtomicLong en lugar de un simple Long?

  5. ¿Qué hace @RequestParam(value="name")?

  6. ¿Por qué la aplicación responde automáticamente en JSON?

  7. ¿En qué puerto se inicia la aplicación por defecto?

  8. ¿Qué sucede si se olvida el parámetro ?name= en la URL?

Respuestas Esperadas​

(A completar por el estudiante)


Parte 9: Ejercicios Adicionales​

Ejercicio 1: Añadir un Parámetro Opcional​

Modifique el controlador para que el parámetro name sea opcional con el valor por defecto "World".

Pista: Utilice defaultValue en @RequestParam

Ejercicio 2: Añadir un Nuevo Método​

Cree un nuevo método en el controlador:

  • URL: /greeting/time
  • Retorna: Un greeting con la hora actual

Ejercicio 3: Modificar el Template​

Cambie el template para que retorne "Bonjour, %s!" en lugar de "Hello, %s!"

Ejercicio 4: Añadir un Endpoint de Salud​

Cree un endpoint /health que retorne simplemente "OK"


Entregables​

A entregar (según las instrucciones de su docente):

  1. Código fuente completo (proyecto ZIP)
  2. Capturas de pantalla mostrando:
  3. Documento de respuestas a las preguntas de comprensión
  4. Ejercicios completados (si se solicitan)

Criterios de Evaluación​

CriterioPuntos
Proyecto creado correctamente con Spring Initializr10%
Clases Greeting y GreetingController completas y funcionales30%
Aplicación inicia sin errores20%
Pruebas exitosas en el navegador20%
Preguntas de comprensión respondidas10%
Ejercicios adicionales (bonus)10%
Total100%

Recursos Adicionales​

Documentación​

Tutoriales en Video​

Herramientas​

Capturas de Pantalla de Referencia​

Documentos con capturas de pantalla detalladas:

Consulte la siguiente carpeta de Google Drive para ver capturas de pantalla completas de cada paso del TP:

📸 Capturas de pantalla del Proyecto Greeting

Contenido disponible:

  • Documento PDF con capturas de pantalla anotadas
  • Documento Word con instrucciones visuales
  • Ejemplos de resultados esperados

Nota: Estas capturas de pantalla utilizan STS (Spring Tool Suite), pero los conceptos y resultados son idénticos con VS Code.


Próximos Pasos​

Una vez completado este TP, estará listo para:

  • TP2: Conexión a una base de datos con JPA
  • TP3: Creación de una API CRUD completa
  • TP4: Seguridad con Spring Security

Notas Importantes​

Buenas Prácticas:

  • Siempre ejecute mvn clean antes de mvn install
  • Detenga la aplicación (Ctrl + C) antes de reiniciar
  • Verifique que el puerto esté libre antes de iniciar
  • Guarde su trabajo regularmente

Ayuda:

Si encuentra problemas:

  1. Consulte la sección "Resolución de Problemas"
  2. Verifique los logs en la consola
  3. Busque el error en Stack Overflow
  4. Contacte a su docente

¡Buen trabajo y buena codificación!


Volver al Módulo 2