Proyecto de laboratorio para el curso Desarrollo de Aplicaciones Web (DAW). Se implementan CRUDs RESTful de tres entidades (Producto, TipoMedic y Medicamento) usando:
- Spring Boot + JPA
- MySQL
- Postman para pruebas
- IntelliJ IDEA + Maven
| Herramienta | Versión |
|---|---|
| Java | 24 |
| Spring Boot | 3.5.0 |
| MySQL | 8.x |
| Maven | Integrado |
| Postman | Para pruebas |
| IntelliJ IDEA | 2024.x |
src
├── controller
│ ├── ProductoController.java
│ ├── TipoMedicController.java
│ └── MedicamentoController.java
├── model
│ ├── Producto.java
│ ├── TipoMedic.java
│ └── Medicamento.java
├── repository
│ ├── ProductoRepository.java
│ ├── TipoMedicRepository.java
│ └── MedicamentoRepository.java
└── resources
└── application.properties
CREATE DATABASE bd_farmacia;spring.datasource.url=jdbc:mysql://localhost:3306/bd_farmacia?useSSL=false&serverTimezone=UTC
spring.datasource.username=root
spring.datasource.password=
spring.jpa.hibernate.ddl-auto=update
spring.jpa.show-sql=true
spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQLDialect- Desde IntelliJ IDEA: ejecuta
Lab11HerediaDawApplication.java - Espera a que diga
Tomcat started on port 8080
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/productos |
Listar todos |
| GET | /api/productos/{id} |
Buscar por ID |
| POST | /api/productos |
Crear producto |
| PUT | /api/productos/{id} |
Actualizar producto |
| DELETE | /api/productos/{id} |
Eliminar producto |
| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/tipos |
Listar todos |
| GET | /api/tipos/{id} |
Buscar por ID |
| POST | /api/tipos |
Crear tipo |
| PUT | /api/tipos/{id} |
Actualizar tipo |
| DELETE | /api/tipos/{id} |
Eliminar tipo |
{
"descripcion": "Antibiótico"
}| Método | Endpoint | Descripción |
|---|---|---|
| GET | /api/medicamentos |
Listar todos |
| GET | /api/medicamentos/{id} |
Buscar por ID |
| POST | /api/medicamentos |
Crear medicamento |
| PUT | /api/medicamentos/{id} |
Actualizar medicamento |
| DELETE | /api/medicamentos/{id} |
Eliminar medicamento |
{
"descripcion": "Amoxicilina 500mg",
"stock": 80,
"precio": 5.50,
"tipoMedic": {
"id": 1
}
}
⚠️ Asegúrate de crear elTipoMedicprimero antes de asociarlo.
Para evitar el ciclo entre Medicamento ↔ TipoMedic, se aplicaron:
// en TipoMedic.java
@JsonManagedReference
@OneToMany(mappedBy = "tipoMedic", cascade = CascadeType.ALL)
private List<Medicamento> medicamentos;
// en Medicamento.java
@JsonBackReference
@ManyToOne
@JoinColumn(name = "tipo_medic_id")
private TipoMedic tipoMedic;O alternativamente con:
@JsonIgnoreProperties("medicamentos")
@JsonIgnoreProperties("tipoMedic")Todas las operaciones CRUD fueron verificadas mediante Postman. Cada error 500 o 405 fue resuelto con controladores actualizados y relación funcional.
- Se implementó con éxito un CRUD completo con relación
@ManyToOne. - Se configuró Spring Boot con MySQL y JPA usando IntelliJ.
- Se aprendió a resolver errores comunes de foreign keys y ciclos infinitos.
- Se utilizó Postman para validar toda la API.
- El proyecto quedó listo para escalar o integrar un frontend.
Adrian Heredia
TECSUP – 2025
Repositorio GitHub