Bienvenido a DTO Example, una API REST moderna construida con Spring Boot, que demuestra el uso de Data Transfer Objects (DTO), MapStruct para el mapeo eficiente de datos y Spring Data JPA para la persistencia. ¡Ideal para aprender buenas prácticas en arquitectura de aplicaciones Java!
- Spring Boot 3.5.4
- Spring Data JPA
- MapStruct
- Lombok
- H2 Database (en memoria)
- Maven
src/
└── main/
└── java/
└── com/example/DTO/
├── entity/ # Entidades JPA (Persona, Direccion)
├── dto/ # Data Transfer Objects (PersonaDireccionDTO)
├── mapper/ # MapStruct mappers (PersonaMapper)
├── repository/ # Spring Data JPA repositories (PersonaRepository)
├── service/ # Lógica de negocio (PersonaService)
└── controller/ # Controladores REST (PersonaController)
-
Entidad:
PersonayDireccionson modelos persistidos en la base de datos. -
DTO:
PersonaDireccionDTOes el objeto que viaja entre el backend y el frontend, ocultando detalles internos. -
Mapper:
PersonaMapperconvierte automáticamente entre entidades y DTOs usando MapStruct. -
Repository:
PersonaRepositoryaccede a los datos con métodos listos para usar. -
Service:
PersonaServicecontiene la lógica de negocio y orquesta el flujo de datos. -
Controller:
PersonaControllerexpone los endpoints REST para interactuar con la app.
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/personas |
Lista todas las personas (DTO) |
| POST | /api/personas |
Crea una nueva persona (con dirección) |
POST /api/personas
{
"nombre": "Juan",
"apellido": "Pérez",
"dni": "12345678",
"direccion": {
"calle": "Calle Falsa 123",
"provincia": "Buenos Aires"
}
}GET /api/personas
[
{
"nombre": "Juan",
"apellido": "Pérez",
"dni": "12345678",
"calle": "Calle Falsa 123",
"provincia": "Buenos Aires"
}
]- Clona el repositorio
- Ejecuta:
- Linux/Mac:
./mvnw spring-boot:run - Windows:
mvnw.cmd spring-boot:run
- Linux/Mac:
- Accede a: http://localhost:8080/api/personas
- La base de datos H2 es en memoria: los datos se borran al reiniciar la app.
- El mapeo entre entidades y DTOs es automático gracias a MapStruct.
- Puedes modificar y extender fácilmente la estructura para tus propios proyectos.
¡Explora el código, aprende