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ámetro | Valor |
|---|---|
| Project | Maven |
| Language | Java |
| Spring Boot | 3.2.0 (o la versión estable más reciente) |
| Group | com.example |
| Artifact | greeting |
| Name | greeting |
| Package name | com.example.demo |
| Packaging | Jar |
| Java | 17 |
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
- Haga clic en el botón Generate
- Se descargará un archivo ZIP:
greeting.zip - 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
- Inicie Visual Studio Code
- Menú: File → Open Folder
- Seleccione la carpeta
greetingdescomprimida - 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
- En VS Code, haga clic derecho en
src/main/java/com/example/demo - Seleccione New File
- 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
- 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
| Dependencia | Rol |
|---|---|
spring-boot-starter-web | Proporciona todo lo necesario para crear aplicaciones web REST (Tomcat, Spring MVC, Jackson) |
spring-boot-starter-test | Proporciona las herramientas de testing (JUnit, Mockito, etc.) |
Paso 4.3: Si Tiene Dependencias Adicionales
Si agregó por error:
spring-boot-starter-data-jpapostgresqllombok
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
- Abra la terminal: Terminal → New Terminal
- Ejecute los comandos:
mvn clean
mvn install
Opción B: Vía la Extensión Maven
- Abra la vista Maven (icono Maven en la barra lateral)
- Despliegue su proyecto
- Clic derecho en clean → Run
- 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
- Abra
GreetingApplication.java - Haga clic en Run encima del método
main - 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:
- Cree una nueva solicitud GET
- URL:
http://localhost:8080/greeting?name=SuNombre - 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:
- Encontrar el proceso:
netstat -ano | findstr :8080
-
Anote el PID (Process ID) en la última columna
-
Finalice el proceso (como administrador):
taskkill /F /PID <número_del_PID>
En macOS/Linux:
- Encontrar el proceso:
lsof -i :8080
- Finalizar el proceso:
kill -9 <PID>
Problema 3: Extensiones de VS Code Faltantes
Síntoma: VS Code no detecta el proyecto Java
Solución:
- Abra la pestaña de Extensiones (Ctrl + Shift + X)
- Instale estas extensiones:
- Extension Pack for Java (Microsoft)
- Spring Boot Extension Pack (VMware)
- Maven for Java (Microsoft)
- Reinicie VS Code
Problema 4: Maven No Reconocido
Síntoma:
'mvn' is not recognized as an internal or external command
Solución:
- Descargue Maven: https://maven.apache.org/download.cgi
- Añada Maven a su PATH del sistema
- Reinicie la terminal
- Verifique:
mvn -version
Parte 8: Preguntas de Comprensión
Preguntas
-
¿Qué hace la anotación
@RestController? -
¿Cuál es la diferencia entre
@RestControllery@Controller? -
¿Qué significa
@GetMapping("/greeting")? -
¿Por qué se utiliza
AtomicLongen lugar de un simpleLong? -
¿Qué hace
@RequestParam(value="name")? -
¿Por qué la aplicación responde automáticamente en JSON?
-
¿En qué puerto se inicia la aplicación por defecto?
-
¿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):
- Código fuente completo (proyecto ZIP)
- Capturas de pantalla mostrando:
- La aplicación ejecutándose en VS Code
- Las pruebas en el navegador con diferentes nombres
- El contador incrementándose
- Referencia: Ver ejemplos de capturas de pantalla
- Documento de respuestas a las preguntas de comprensión
- Ejercicios completados (si se solicitan)
Criterios de Evaluación
| Criterio | Puntos |
|---|---|
| Proyecto creado correctamente con Spring Initializr | 10% |
| Clases Greeting y GreetingController completas y funcionales | 30% |
| Aplicación inicia sin errores | 20% |
| Pruebas exitosas en el navegador | 20% |
| Preguntas de comprensión respondidas | 10% |
| Ejercicios adicionales (bonus) | 10% |
| Total | 100% |
Recursos Adicionales
Documentación
Tutoriales en Video
Herramientas
- Postman - Para probar APIs
- JSON Formatter - Para formatear JSON
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 cleanantes demvn 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:
- Consulte la sección "Resolución de Problemas"
- Verifique los logs en la consola
- Busque el error en Stack Overflow
- Contacte a su docente
¡Buen trabajo y buena codificación!