Curso · Spring Boot
1/0
Curso autodirigido · v3 · intro amable + caso real + diagramas

Spring Boot desde first principles.

Un recorrido amable y progresivo para alguien que nunca escuchó hablar de Spring Boot. Primero entendemos qué es una aplicación web. Después vemos por qué Spring Boot ayuda. Recién ahí escribimos código.

Perfil: principiante técnico·Proyecto guía: Ticket API·Duración: 12–18 h
Sección 0Bienvenida
01·b
Empezamos sin suponer conocimiento previo

¿Qué es Spring Boot, explicado sin vueltas?

Spring Boot es una forma ordenada de crear aplicaciones Java que reciben pedidos, aplican reglas y responden.

Por ejemplo: una app que recibe un ticket de venta, valida el total, lo guarda en una base de datos y responde si el pago fue aceptado.

No necesitás entender todo Spring el primer día. Al principio alcanza con esta idea:

Spring Boot te da una estructura lista para construir backend: servidor web, configuración, objetos conectados, logs, tests y salud de la aplicación.

La analogía simple

Java es el lenguaje. Spring es una caja de herramientas. Spring Boot es el taller ya armado: banco de trabajo, enchufes, luces, herramientas básicas y reglas de orden.

No es magia

Cuando escribís @RestController, no estás invocando magia. Estás diciendo: “esta clase recibe pedidos HTTP”. El curso va a explicar cada anotación desde el problema que resuelve.

Objetivo de esta introQue el alumno entienda para qué existe Spring Boot antes de ver Maven, anotaciones o estructura de carpetas.
Sección 0Diagrama mental
01·c
El dibujo que hay que tener en la cabeza

Una aplicación web es una conversación entre sistemas.

De un click a una respuesta
El usuario no “usa Spring Boot”. Usa una pantalla. Spring Boot vive detrás, ordenando el backend.
Usuario
Pantalla web / mobile
API Spring Boot
Reglas de negocio
Base de datos

1 Request

POST /ticketsLa pantalla envía datos: terminal, total, items.
JSONFormato simple para comunicar sistemas.

El pedido entra como HTTP. Spring Boot lo convierte en un objeto Java.

2 Response

201 CreatedTicket creado correctamente.
400 Bad RequestDatos inválidos: total negativo, terminal vacía.

La respuesta vuelve ordenada: status HTTP + JSON claro.

Sin framework: vos armás routing, validación, errores, config y logs casi a mano.
Con Spring Boot: usás convenciones probadas y te concentrás en las reglas del negocio.
Sección 0Use case real
01·d
Comparación honesta

Use case: API de tickets hecha rápido en Node/Express y luego ordenada con Spring Boot.

Node/Express puede ser una excelente opción para APIs livianas. El punto del ejemplo no es decir “Node está mal”. El punto es mostrar qué mejora Spring Boot cuando el proyecto empieza a necesitar reglas, validación, base de datos, tests y operación.

Versión inicial en Express

// index.js
app.post('/tickets', async (req, res) => {
  const ticket = req.body;
  if (!ticket.terminal || ticket.total <= 0) {
    return res.status(400).json({ error: 'invalid ticket' });
  }
  const saved = await db.insert(ticket);
  res.status(201).json(saved);
});

Funciona, pero...

Si el equipo no define estructura, es fácil que routing, validación, SQL, reglas y errores terminen mezclados en pocos archivos.

Versión ordenada en Spring Boot

@RestController
@RequestMapping("/tickets")
class TicketController {
  private final TicketService service;

  @PostMapping
  ResponseEntity<TicketResponse> create(
      @Valid @RequestBody TicketRequest req) {
    return ResponseEntity.status(201)
      .body(service.create(req));
  }
}

Mejora concreta

El controller recibe HTTP. El service decide reglas. El repository guarda datos. La validación y los errores tienen lugar propio.

Sección 0Qué mejora Spring Boot
01·e
Impacto práctico

La mejora no es “más código”. Es más estructura verificable.

Necesidad realEn una API rápida sin estructuraCon Spring Boot bien usado
Validar datosChecks manuales repartidos.@Valid, DTOs y mensajes de error consistentes.
Reglas de negocioMezcladas con rutas HTTP.TicketService concentra decisiones.
PersistenciaSQL o driver usado desde cualquier lugar.Repository separa acceso a datos.
ConfiguraciónVariables y valores dispersos.application.yml, profiles y propiedades externas.
OperaciónHay que armar health checks y métricas aparte.Actuator expone salud y métricas de base.
TestingDepende mucho de disciplina del equipo.JUnit, MockMvc y slices de test ya integrados al ecosistema.
Ticket API: separación de responsabilidades
HTTP
Controller
Service
Repository
DB
Spring Boot vale la pena cuando querés que el backend sea mantenible, testeable y operable, no solo que responda una demo.
Sección 0Cómo usar este material
02
Uso recomendado

Este curso va despacio al principio. Después acelera.

La idea es construir confianza: primero entendés qué hace cada pieza; después la usás. HTTP, Controller, Service, Repository, Bean, configuración, test y deploy van apareciendo en ese orden.

  • Leé una sección.
  • Corré el comando indicado.
  • Modificá algo chico.
  • Rompé algo a propósito.
  • Pedile a ChatGPT que te explique el error.

Navegación

Usá las flechas del teclado o los botones abajo. Cada módulo tiene un entregable. Al final tenés anexos de instalación, herramientas y prompts listos para copiar.

Resultado finalUna API Spring Boot funcional, testeada, con persistencia simple, Actuator y comandos de ejecución claros.
Sección 0Mapa visual
03
Diagrama estilo técnico

Antes de Spring Boot: entender el flujo.

HTTP request → aplicación → respuesta
Primero entendé la cadena. Spring Boot automatiza piezas, no reemplaza el razonamiento.

1 Sin estructura clara

main()crea objetos manualmente
if/else de rutasrouting casero
SQL mezcladológica + persistencia juntas

Funciona para probar. Escala mal cuando aparecen errores, validaciones, tests y configuración.

2 Con Spring Boot

Controllerrecibe HTTP y devuelve JSON
Servicereglas del negocio
Repositorylee/escribe datos

La arquitectura queda explícita. Spring crea objetos, conecta dependencias y levanta el servidor.

Riesgo sin capas: todo queda acoplado y difícil de testear.
Objetivo con Boot: flujo simple, separación visible y ejecución repetible.
Sección 0Ruta completa
04
Ruta de 8 módulos

El camino correcto: del protocolo al deploy.

M0

Setup
Instalar JDK, Maven, IDE, Git y crear proyecto.

M1

HTTP
Entender request, response, JSON y status codes.

M2

Controller
Primer endpoint real con Spring Web.

M3

DI
Beans, services e inyección por constructor.

M4

Datos
Repository, memoria, JDBC/H2 y SQL.

M5+

Calidad
Validación, errores, tests, Actuator, profiles.

Regla del curso: si no podés explicar qué problema resuelve una anotación, todavía no la uses como magia.
MÓDULO 0Setup mínimo
05
00

Preparar la máquina.

Antes de Spring Boot, necesitás herramientas básicas. No muchas. Bien instaladas.

Duración · 60–90 min
M0Herramientas
06
Instalación mínima

Qué instalar y para qué sirve.

HerramientaPara qué sirveChequeo
JDK 21Compila y ejecuta Java. No alcanza con JRE.java -version
MavenDescarga dependencias, compila, ejecuta tests y empaqueta.mvn -version
IDEEditor con autocompletado, navegación y debugging.Abrir proyecto sin errores.
GitVersionado. Permite volver atrás cuando rompés algo.git --version
curl/PostmanProbar endpoints HTTP sin depender del frontend.curl --version

Decisión recomendada

Para aprender: Java 21 LTS + Maven + Spring Initializr + IntelliJ Community o VS Code. No arranques con Docker, Kubernetes, microservicios ni native-image.

M0Crear proyecto
07
Spring Initializr

Crear el proyecto base sin tocar código todavía.

Valores sugeridos

  • Project: Maven
  • Language: Java
  • Spring Boot: versión estable disponible
  • Group: com.example
  • Artifact: ticket-api
  • Packaging: Jar
  • Java: 21

Dependencias iniciales

# Dependencias para empezar
Spring Web
Validation
Spring Boot Actuator
H2 Database       # para aprender sin instalar DB
Spring Data JDBC  # opcional, se usa luego

Para el primer día, solo necesitás Spring Web. El resto entra cuando el concepto ya existe.

Entregable M0Proyecto abre en el IDE y corre con mvn spring-boot:run.
MÓDULO 1HTTP y JSON
08
01

Entender la web antes del framework.

Spring Boot recibe HTTP. Si HTTP no está claro, Spring parece magia.

Duración · 90 min
M1Request/Response
09
First principles

Un endpoint es una función llamada por HTTP.

Cliente → servidor Spring Boot → JSON
curl / navegador
GET /tickets/1
Controller
Service
JSON response
PiezaSignificadoEjemplo
MétodoQué intención tiene el request.GET, POST
PathQué recurso se quiere operar./tickets/1
BodyDatos enviados al servidor.JSON de alta de ticket
StatusResultado técnico.200, 201, 400, 404, 500
M1Verbos HTTP
10
Contrato básico

Elegir bien el verbo evita APIs confusas.

VerboUsoEjemplo
GETLeerGET /tickets/1
POSTCrear o ejecutar acciónPOST /tickets
PUTReemplazarPUT /tickets/1
PATCHCambiar partePATCH /tickets/1/status
DELETEBorrarDELETE /tickets/1

Error típico

Usar GET para modificar datos: GET /payTicket?id=1. Puede funcionar, pero conceptualmente está mal. Pagar es una acción: usá POST.

MÓDULO 2Primer endpoint
11
02

Primer Controller.

El controller es la frontera HTTP de tu aplicación.

Duración · 90 min
M2Hello endpoint
12
Primer código

El endpoint mínimo que demuestra el flujo.

package com.example.ticketapi;

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class HelloController {

    @GetMapping("/hello")
    public String hello() {
        return "Spring Boot funciona";
    }
}

Probar

$ mvn spring-boot:run
$ curl http://localhost:8080/hello

Qué aprendiste

@RestController expone métodos como endpoints. @GetMapping conecta una URL con un método Java.

M2JSON y DTOs
13
De String a objeto

Spring convierte objetos Java a JSON.

public record TicketResponse(
    Long id,
    String status,
    java.math.BigDecimal total
) {}

@GetMapping("/tickets/{id}")
public TicketResponse getTicket(@PathVariable Long id) {
    return new TicketResponse(id, "OPEN",
        new BigDecimal("123.45"));
}

Respuesta esperada

{
  "id": 1,
  "status": "OPEN",
  "total": 123.45
}

DTO significa Data Transfer Object. Es el objeto que cruza la frontera de la API. No expongas entidades internas sin pensar.

Entregable M2GET /hello y GET /tickets/{id} funcionando.
MÓDULO 3Beans e inyección
14
03

Inyección de dependencias.

El corazón de Spring no es REST. Es el contenedor que crea y conecta objetos.

Duración · 2 h
M3Sin Spring vs con Spring
15
Cambio mental

Antes creabas objetos. Ahora declarás dependencias.

De construcción manual a grafo de objetos

1 Manual

var repo = new TicketRepository();
var service = new TicketService(repo);
var controller = new TicketController(service);

Vos decidís cuándo y cómo se crea cada objeto.

2 Spring

@Service
public class TicketService {
  private final TicketRepository repo;
  public TicketService(TicketRepository repo) {
    this.repo = repo;
  }
}

Spring crea el objeto y le pasa sus dependencias.

M3Capas
16
Arquitectura mínima

Separar responsabilidades desde el primer proyecto.

Controller
Service
Repository
DB / memoria
CapaResponsabilidadNo debería
ControllerHTTP, DTOs, status codesContener reglas de negocio complejas
ServiceReglas, casos de uso, transaccionesSaber detalles de HTTP
RepositoryPersistenciaDecidir reglas del negocio
Heurística: si una clase sabe demasiado, se vuelve difícil de testear y peligrosa de modificar.
M3TicketService
17
Implementación guiada

Crear tickets con reglas visibles.

@Service
public class TicketService {
  private final TicketRepository repository;

  public TicketService(TicketRepository repository) {
    this.repository = repository;
  }

  public Ticket create(TicketRequest request) {
    if (request.total().signum() <= 0) {
      throw new IllegalArgumentException("total must be positive");
    }
    return repository.save(Ticket.open(request.total()));
  }
}

Qué mirar

  • Constructor injection, no field injection.
  • La regla de negocio está en el service.
  • El controller no decide cómo crear un ticket.
  • El repository no valida reglas de negocio.
MÓDULO 4Datos
18
04

Persistencia sin humo.

Primero memoria. Después SQL. No metas JPA hasta entender el flujo.

Duración · 2 h
M4Repository en memoria
19
Paso seguro

Primero guardar en memoria para aislar conceptos.

@Repository
public class InMemoryTicketRepository
    implements TicketRepository {

  private final Map<Long, Ticket> data = new ConcurrentHashMap<>();
  private final AtomicLong ids = new AtomicLong();

  public Ticket save(Ticket ticket) {
    Long id = ids.incrementAndGet();
    Ticket saved = ticket.withId(id);
    data.put(id, saved);
    return saved;
  }
}

Por qué conviene

Separás el aprendizaje: primero Controller + Service + Repository. Después agregás SQL. Si todo entra junto, no sabés qué falló.

M4SQL/JDBC
20
Segundo paso

Cuando el flujo funciona, agregás base de datos.

Schema inicial

create table tickets (
  id bigint generated by default as identity primary key,
  status varchar(20) not null,
  total decimal(18,2) not null,
  created_at timestamp not null
);

Config H2 para aprender

spring.datasource.url=jdbc:h2:mem:ticketdb
spring.h2.console.enabled=true
spring.sql.init.mode=always

H2 sirve para aprender. Para producción elegís PostgreSQL, SQL Server, MySQL, etc.

Entregable M4Tickets se guardan en memoria o H2. El controller no cambia cuando cambia la persistencia.
MÓDULO 5Validación y errores
21
05

Errores previsibles.

Una API seria devuelve errores claros, no stack traces ni mensajes improvisados.

Duración · 2 h
M5Validation
22
Entrada confiable

Validar request antes de entrar al negocio.

public record CreateTicketRequest(
  @NotNull
  @DecimalMin("0.01")
  BigDecimal total,

  @NotBlank
  String terminal
) {}

@PostMapping("/tickets")
public TicketResponse create(
    @Valid @RequestBody CreateTicketRequest request) {
  return service.create(request);
}

Principio

La API no puede confiar en el cliente. Cualquier campo puede venir vacío, negativo, mal formado o directamente ausente.

No hagas esto

No repitas validaciones manuales en cada controller. Usá Bean Validation para reglas estructurales.

M5Errores uniformes
23
ControllerAdvice

Un solo lugar para traducir excepciones.

@RestControllerAdvice
public class ApiExceptionHandler {

  @ExceptionHandler(TicketNotFoundException.class)
  public ResponseEntity<ApiError> notFound(
      TicketNotFoundException ex) {
    return ResponseEntity.status(404)
        .body(new ApiError("TICKET_NOT_FOUND", ex.getMessage()));
  }
}

Status codes mínimos

200OK: lectura exitosa
201Created: recurso creado
400Bad Request: datos inválidos
404Not Found: recurso inexistente
409Conflict: regla de negocio bloquea operación
MÓDULO 6Tests
24
06

Tests para aprender y no mentirse.

El test no es burocracia. Es la forma de comprobar que entendiste.

Duración · 2 h
M6Tipos de test
25
Pirámide mínima

Qué testear según la capa.

TipoQué pruebaHerramienta
UnitarioReglas del service sin levantar Spring.JUnit + AssertJ
Web sliceController, JSON, status codes.@WebMvcTest + MockMvc
IntegraciónApp completa con contexto Spring.@SpringBootTest
PersistenciaRepository y SQL.H2/Testcontainers según madurez
Para principiantes: primero test unitario del service. Después controller. Después integración.
M6Test de service
26
Ejemplo simple

Testear una regla sin levantar servidor.

@Test
void rejectsNegativeTotal() {
  TicketRepository repo = new InMemoryTicketRepository();
  TicketService service = new TicketService(repo);

  CreateTicketRequest req = new CreateTicketRequest(
      new BigDecimal("-1.00"), "POS-1");

  assertThatThrownBy(() -> service.create(req))
      .isInstanceOf(IllegalArgumentException.class);
}

Lectura correcta

Este test no necesita HTTP, JSON, Spring ni base. Prueba una regla. Cuanto más chico el test, más claro el fallo.

MÓDULO 7Operación
27
07

Correr como aplicación real.

No alcanza con que compile. Tiene que arrancar, configurarse, loguear y exponer salud.

Duración · 90 min
M7Actuator y profiles
28
Producción básica

Dos conceptos que conviene aprender temprano: health y config.

Actuator

$ curl http://localhost:8080/actuator/health
{
  "status": "UP"
}

Sirve para saber si la app está viva y preparada para monitoreo.

Profiles

# application-dev.properties
server.port=8080

# application-prod.properties
server.port=8085
logging.file.name=logs/ticket-api.log

Permite cambiar config sin tocar código.

M7Build y run
29
Comandos mínimos

El ciclo básico de una app Spring Boot.

01
Compilar y testear
mvn clean test
02
Empaquetar JAR
mvn clean package
03
Ejecutar
java -jar target/ticket-api-0.0.1-SNAPSHOT.jar
04
Ejecutar con profile
java -jar target/ticket-api-0.0.1-SNAPSHOT.jar --spring.profiles.active=prod
ANEXO AInstalación
30
A

Anexo de instalación.

Checklist Windows pensado para alguien que arranca desde cero.

Duración · 45–90 min
AWindows checklist
31
Instalar y verificar

Instalación base paso a paso.

JDK
Instalar Temurin/Liberica JDK 21 x64. Verificar: java -version y javac -version.
JAVA_HOME
Crear variable de entorno JAVA_HOME apuntando al directorio del JDK, no a bin.
PATH
Agregar %JAVA_HOME%\bin al PATH.
Maven
Instalar Maven o usar el wrapper mvnw.cmd que trae el proyecto generado.
IDE
Instalar IntelliJ IDEA Community o VS Code con Extension Pack for Java.
Git
Instalar Git for Windows. Verificar: git --version.
ADiagnóstico
32
Errores frecuentes

Si algo falla, empezá por acá.

SíntomaCausa probableChequeo
java no se reconocePATH mal configuradoReabrir terminal y correr where java
Maven usa otro JavaJAVA_HOME apunta a JDK viejomvn -version
Puerto 8080 ocupadoOtra app está usando el puertoCambiar server.port=8081
Dependencias no bajanProxy/firewall/redProbar otra red o configurar proxy Maven
IDE marca todo rojoNo importó MavenReload Maven Project
ANEXO BUso de herramientas
33
B

Intro de uso de herramientas.

Qué hace cada herramienta en el curso y cuándo usarla.

Lectura · 30 min
BHerramientas
34
Caja de herramientas

No instales por instalar. Cada herramienta tiene un rol.

IDE

Leer código, navegar clases, autocompletar, debuggear. Usalo para entender estructura.

Terminal

Ejecutar comandos reproducibles: test, build, run, curl. Lo que funciona acá funciona en CI.

Maven

Administra dependencias y lifecycle: compile, test, package. No copies JARs manualmente.

curl/Postman

Probar la API sin frontend. Es el tester mínimo de todo backend.

Git

Guardar avances por checkpoint. Commit chico después de cada módulo funcionando.

ChatGPT/Codex

Explicar errores, revisar código, crear ejercicios y generar tests. No reemplaza entender.

ANEXO CPrompts
35
C

Prompts para estudiar con ChatGPT.

Prompts concretos para que el alumno no se quede trabado.

Usar durante todo el curso
CPrompts de explicación
36
Copiar y pegar

Prompts para entender conceptos sin saltar pasos.

Prompt 1 · Explicación desde cero

Estoy aprendiendo Spring Boot desde cero. Explicame qué problema resuelve [CONCEPTO] usando una analogía simple, luego una explicación técnica y finalmente un ejemplo mínimo en Java.

Prompt 2 · First principles

No me expliques la anotación todavía. Primero explicame qué tendría que hacer manualmente en Java para resolver este problema, y recién después cómo Spring Boot lo simplifica.

Prompt 3 · Comparación

Compará Controller, Service y Repository en una tabla. Para cada capa indicá responsabilidad, ejemplo de código y errores típicos de principiante.

Prompt 4 · Mini examen

Haceme 10 preguntas cortas sobre [TEMA]. No me des las respuestas hasta que yo conteste. Después corregime con explicación.

CPrompts de práctica
37
Debug y código

Prompts para cuando el proyecto no compila o no responde.

Prompt 5 · Diagnóstico de error

Te paso un error de Spring Boot. Quiero que lo diagnostiques por capas: compilación, dependencias, configuración, runtime, código. No propongas cambios hasta identificar la causa más probable.

Prompt 6 · Revisión de código

Revisá este controller/service/repository. Marcá acoplamientos incorrectos, responsabilidades mezcladas, nombres confusos y tests faltantes. No reescribas todo: primero explicá problemas.

Prompt 7 · Generar test

Generá tests JUnit para esta clase. Cubrí caso exitoso, datos inválidos y borde. Explicá qué prueba cada test y qué NO está probando.

Prompt 8 · Codex/Claude Code

Leé el proyecto. No modifiques archivos todavía. Primero explicá la arquitectura actual, comandos de build/test y dónde agregarías el próximo endpoint según las capas existentes.

CPrompts de proyecto
38
Guiar el aprendizaje

Prompts para avanzar sin que la AI haga magia negra.

Prompt 9 · Paso siguiente

Estoy en el módulo [N]. Ya tengo funcionando [LO QUE FUNCIONA]. Dame el próximo paso mínimo, el código esperado, cómo probarlo con curl y cómo saber si está mal.

Prompt 10 · No copiar sin entender

Antes de darme código, explicame qué clases voy a crear, por qué existen y cómo se conectan. Luego dame el código por archivo, en orden de creación.

Prompt 11 · Refactor guiado

Este código funciona pero está mezclado. Proponé un refactor en Controller/Service/Repository. Mantené el comportamiento y decime qué tests deberían seguir pasando.

Prompt 12 · Checklist de cierre

Actuá como revisor técnico. Dame un checklist para aprobar mi proyecto Spring Boot básico: endpoints, validación, errores, tests, configuración, logs y README.

ANEXO DProyecto guía
39
D

Proyecto guía: Ticket API.

Un ejercicio chico, suficientemente real para aprender las capas.

Proyecto · 4–6 h
DEspecificación
40
Spec ejecutable

Lo que debe hacer la API final.

Endpoints

  • POST /tickets crea ticket.
  • GET /tickets/{id} busca por id.
  • GET /tickets lista tickets.
  • POST /tickets/{id}/pay marca como pagado.
  • GET /actuator/health muestra salud.

Reglas

  • Total debe ser mayor a cero.
  • Terminal no puede estar vacío.
  • No se puede pagar ticket inexistente.
  • No se puede pagar dos veces.
  • Errores deben ser JSON uniforme.
Cierre del cursoProyecto con README: cómo instalar, correr, probar endpoints y ejecutar tests.
ANEXO EGit + GitHub + Agentes
41
E

Git y GitHub, lo mínimo para trabajar bien.

No es un curso de Git. Es el circuito básico para guardar avances, subirlos a GitHub y trabajar con Codex o Claude Code sin romper el proyecto.

Lectura · 25–35 min
EMapa mental
42
Primero la idea

Git guarda versiones. GitHub las comparte. El agente trabaja sobre una carpeta.

Para empezar no necesitás saber ramas complejas, rebase ni pull requests. Necesitás entender este flujo simple:

Carpeta local
Git local
Commit
GitHub
Codex / Claude Code
Edita archivos
Vos revisás diff
Commit + push

Analogía simple

Git es como guardar checkpoints en un videojuego. GitHub es la copia en la nube. Si algo sale mal, volvés a un checkpoint anterior.

Regla para principiantes

No uses agentes sobre una carpeta sin Git. Antes de pedir cambios, dejá el proyecto en estado limpio: git status sin archivos pendientes.

ECrear repo
43
GitHub desde cero

Crear el repo remoto en 5 pasos.

01
Entrar a GitHub
Ir a GitHub, botón New repository.
02
Nombre
Usar un nombre claro: ticket-api-spring-boot.
03
Privacidad
Para aprender: privado si vas a subir código real; público solo si no hay claves, datos ni archivos internos.
04
README
Si empezás desde GitHub, podés marcar Add README. Si ya tenés proyecto local generado por Spring Initializr, mejor dejarlo vacío para conectar después.
05
Copiar URL
Copiar la URL HTTPS o SSH del repo. Ejemplo: https://github.com/usuario/ticket-api-spring-boot.git.
ResultadoUn repositorio vacío o inicializado en GitHub, listo para clonar o conectar con tu carpeta local.
EClone
44
Bajar el repo a tu máquina

Clonar significa: crear una copia local conectada a GitHub.

Comandos mínimos

# Elegí una carpeta de trabajo
cd C:\Work

# Clonar el repo desde GitHub
git clone https://github.com/usuario/ticket-api-spring-boot.git

# Entrar al proyecto
cd ticket-api-spring-boot

# Verificar estado
git status

# Abrir en VS Code, si lo usás
code .

Qué deberías ver

  • Una carpeta nueva con el nombre del repo.
  • Una carpeta oculta .git: ahí vive el historial.
  • git status debería decir que no hay cambios pendientes.
  • El proyecto queda listo para abrir en IDE o para trabajar con Codex/Claude.

Evitar

No trabajes en ZIPs descargados manualmente. Cloná con Git. Si no hay .git, no tenés historial local real.

ECommit + push
45
Ciclo básico de trabajo

Editar, probar, guardar checkpoint, subir a GitHub.

El circuito sano

Editar
Test
Diff
Commit
Push
  • Editar: cambiar código o docs.
  • Test: ejecutar mvn test.
  • Diff: mirar qué cambió antes de guardar.
  • Commit: guardar un checkpoint local.
  • Push: subir ese checkpoint a GitHub.

Comandos

# 1. Ver archivos modificados
git status

# 2. Ver cambios concretos
git diff

# 3. Ejecutar tests
mvn test

# 4. Preparar archivos para commit
git add .

# 5. Crear checkpoint local
git commit -m "feat: agregar endpoint de tickets"

# 6. Subir a GitHub
git push origin main

Para arrancar, usá mensajes simples: feat: para funcionalidad, fix: para correcciones, docs: para documentación.

EConectar proyecto local existente
46
Cuando ya tenés la carpeta creada

Si generaste el proyecto primero, conectalo después a GitHub.

Este caso pasa mucho con Spring Initializr: descargás el ZIP, lo descomprimís, abrís el proyecto y recién después querés subirlo a GitHub.

Comandos

# Dentro de la carpeta del proyecto
git init

git add .

git commit -m "chore: proyecto inicial Spring Boot"

# Conectar con el repo vacío creado en GitHub
git remote add origin https://github.com/usuario/ticket-api-spring-boot.git

# Definir rama principal y subir
git branch -M main
git push -u origin main

Antes de subir, revisar

  • Existe .gitignore.
  • No se suben carpetas target/, .idea/, .vscode/ si no corresponde.
  • No se suben claves, passwords, tokens ni archivos .env.
  • El proyecto compila con mvn test.

Regla de seguridad

Si un archivo tiene credenciales, no va al repo. Ni público ni privado. Usá variables de entorno o archivos locales ignorados por Git.

ECodex / Claude Code
47
Sesión con agente

Cómo usar Codex o Claude sin perder control.

01
Empezá limpio
Antes de abrir el agente: git status. Si hay cambios, commitealos o descartalos. No mezcles trabajos.
02
Primera instrucción: leer, no modificar
Pedile que entienda el proyecto antes de tocar archivos.
03
Un pedido chico
Ejemplo: “agregá validación al POST /tickets”. No pedir “hacé toda la app”.
04
Tests obligatorios
Después del cambio: mvn test. Si falla, no hay commit.
05
Revisar diff
Mirar qué archivos tocó. Si cambió demasiadas cosas, frenar y pedir explicación.
06
Commit + push
Al principio, hacelo vos manualmente. Más adelante podés delegar commits o PRs, pero sólo con revisión.
EPrompts de sesión
48
Copiar y pegar

Prompts básicos para trabajar con repo versionado.

Prompt 1 · Lectura inicial

Leé este repo Spring Boot. No modifiques archivos todavía. Explicame estructura, paquetes principales, comandos de build/test/run y riesgos visibles.

Prompt 2 · Cambio controlado

Implementá solo el cambio descripto: [CAMBIO]. No toques dependencias ni estructura global. Agregá o actualizá tests. Al final indicá archivos modificados y cómo probar.

Prompt 3 · Revisión antes de commit

Revisá el diff actual como si fueras code reviewer. Señalá errores, cambios innecesarios, tests faltantes y posibles regresiones. No hagas commit todavía.

Prompt 4 · Commit message

Proponé un mensaje de commit corto con formato tipo conventional commits para estos cambios. No inventes alcance; basate sólo en el diff.

Resultado del anexoEl alumno puede crear repo, clonar, trabajar con agente, revisar cambios y subir un checkpoint básico a GitHub.
FinalChecklist
49
Criterio de aprobación

Terminaste cuando podés demostrar, no declarar.

ValidaciónCriterio mínimo
Buildmvn clean test pasa.
RunLa app arranca con mvn spring-boot:run.
HTTPTodos los endpoints responden con status correcto.
ValidaciónRequests inválidos devuelven 400 con JSON claro.
NegocioNo permite pagar dos veces ni pagar ticket inexistente.
TestsHay tests de service y al menos un test de controller.
Operación/actuator/health responde UP.
READMEIncluye instalación, comandos, endpoints y ejemplos curl.
Aprender Spring Boot no es memorizar anotaciones. Es poder explicar el flujo completo desde un request hasta una respuesta persistida.
navegar · Home inicio · End final