Saltar navegación

20260210 API_REST_2 - Contenido educativo

Ajuste de pantalla

El ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:

Subido el 10 de febrero de 2026 por Raquel G.

1 visualizaciones

Descargar la transcripción

Pero bueno, después del recreo tenéis clase con él 00:00:02
Ah, bueno, pues entonces lo único es que 00:00:04
No, ha venido 00:00:06
Pero no le hemos dejado entrar 00:00:10
Vale 00:00:11
Los get, todos 00:00:14
El hashcode y el equals, también lo tiene 00:00:15
Y el toString 00:00:19
El toString también lo tiene 00:00:21
Y ya está, y tiene todo eso, constructor sin parámetros 00:00:23
No tiene 00:00:26
Vale, se le pueden añadir métodos 00:00:27
Pero no es lo habitual 00:00:30
Bueno, vamos a hacernos la matrícula de TO 00:00:31
Venga, ¿qué queremos que tenga la matrícula de TO? 00:00:34
Sí, un récord, un récord, un récord 00:00:42
Es que voy en piloto automático 00:00:44
Lo que no queremos que tenga es alumno 00:00:47
Claro, alumno no lo queremos 00:00:48
Vale, pues entonces, matrícula de TO 00:00:50
Matrícula de TO 00:00:55
Se tendría que tener un nombre más específico, ¿no? 00:00:57
Porque matrículas de TO habrá mil 00:01:01
No, matrícula de TO 00:01:02
Es la clase en la que cae 00:01:06
El objeto matrícula 00:01:08
No tiene por qué hacer varios 00:01:10
Ah, bueno, sí, sí, sí, vale 00:01:12
Sí, sí, hay varias consultas con diferentes 00:01:16
Lo puedo, claro, vale, eso sí 00:01:18
Long id 00:01:20
Uy, ¿dónde estoy metiendo yo esto? Perdón 00:01:22
Control x 00:01:24
Esto lo tengo que meter aquí en los paréntesis 00:01:25
Long 00:01:27
El id, vale 00:01:30
¿Qué más hemos dicho que tenía? 00:01:32
La matrícula tiene la fecha, ¿verdad? 00:01:36
Local date, fecha 00:01:40
Y la matrícula tiene el nombre de la asignatura, ¿verdad? 00:01:42
Asignatura 00:01:48
Y tiene algo más 00:01:48
La matrícula, el alumno que es del que queremos pasar 00:01:58
¿Verdad? 00:02:02
Claro, del alumno queremos pasar 00:02:03
Entonces 00:02:07
A ver, porque precisamente nuestro problema 00:02:09
Es cuando yo recupero 00:02:17
Una matrícula, la recupero ya colgando 00:02:19
De un alumno, ¿vale? 00:02:21
Era esto la consulta que hacíamos 00:02:22
Esta, yo recupero mi alumno 00:02:25
Y mi alumno ya viene con la matrícula 00:02:27
Pero dentro de la matrícula no quiero que a la vez 00:02:29
Me aparezca el alumno otra vez, porque uno ya está arriba 00:02:31
si me aparece el alumno 00:02:33
a su vez el alumno tendrá su lista de matrículas 00:02:35
con lo cual, pum, pum, pum, pum, pum, teníamos ese problema 00:02:38
que es lo que 00:02:40
que era para lo que habíamos puesto aquí en origen 00:02:45
el JSON ignore, pero claro 00:02:49
esto era un parchecito, no, si 00:02:52
tenemos que evitar tocar el modelo para todo lo que no sea 00:02:53
JPA y 00:02:56
aspectos de negocio, pues de las 00:02:58
columnas de mi tabla 00:03:00
claro, vale, pues entonces matrícula 00:03:02
DTO está y 00:03:04
alumno DTO está 00:03:06
entonces ahora mi controller 00:03:08
que me devuelva un alumno DTO 00:03:09
para eso el servicio me tendrá que devolver 00:03:11
un alumno DTO 00:03:14
entonces me voy al servicio 00:03:16
que 00:03:18
entonces 00:03:23
a ver, podría yo aquí en el controller 00:03:25
coger el alumno 00:03:30
y el alumno convertirlo a DTO o hacerlo 00:03:32
en el servicio, vale, pero lo vamos a hacer 00:03:34
en el servicio para que el controller 00:03:36
no se llene de códigos 00:03:38
¿vale? el controller que tenga la parte 00:03:40
más relacionada con la web, todo lo que sea 00:03:42
manipulación de datos al servicio 00:03:44
pues venga, nos vamos aquí 00:03:45
al service 00:03:48
entonces 00:03:49
este de aquí 00:03:51
vamos a dejarlo, pero 00:03:54
para no quitarlo 00:03:55
y vamos a 00:03:59
poner un getAlumno 00:04:01
DTO 00:04:03
¿vale? un getAlumno DTO 00:04:06
Entonces, ahora, ¿qué tenemos? 00:04:09
Tenemos que convertir el alumno, getAlumno de TO, 00:04:18
que me devuelva un alumno de TO. 00:04:25
Y ahora tenemos que convertir a nuestro alumno A, 00:04:28
lo tenemos que convertir en alumno de TO para devolverlo. 00:04:31
Entonces, para eso vamos a hacer primero la lista, 00:04:34
vamos a convertir su lista de matrículas. 00:04:36
Pues entonces, A.getMatriculas, 00:04:39
Vamos a mapear sus matrículas 00:04:41
A mapearlas a matrículas de Teo 00:04:45
¿Verdad? 00:04:47
Entonces 00:04:50
¿Qué vamos a hacer con las matrículas del alumno? 00:04:51
Primero hemos dicho mapearlas a 00:04:54
De Teo 00:04:57
Pues cada matrícula de su alumno 00:04:58
Mapeamela a 00:05:01
Puedo hacer ya directamente 00:05:04
Un new 00:05:06
Sí, ¿verdad? 00:05:07
Un new 00:05:09
Matrícula 00:05:10
DTO con los parámetros 00:05:12
Que serán 00:05:15
X.matriculaDTO 00:05:16
Lo que pasa es que no sé en qué orden iban 00:05:18
Id, fecha y asignatura 00:05:20
Pues entonces 00:05:22
X.getId 00:05:24
X.get 00:05:28
Fecha 00:05:36
Primero, ¿no? 00:05:38
Y x.get 00:05:42
Vale 00:05:45
Asignatura 00:05:45
Y ahora, de cada matrícula me la transforma para cada X, vuelve todo esto y ahora esto lo convierto en toList, pero quería bajar el punto de abajo. 00:05:47
Joder, todavía me da esto 00:06:14
.toList 00:06:20
Vale, entonces a.getMatriculas.toList 00:06:24
Esto será mi lista de matrícula de TO 00:06:34
A ver, ahora repasamos a ver si lo he hecho bien 00:06:41
Vale 00:06:48
Vale, bueno, pues entonces, primero me he creado una lista de matrículas DTO a partir de las matrículas originales del alumno y ahora ya devuelvo un alumno DTO cuyos campos van a ser a.getid, a.getnombre, no sé en qué orden estaban aquí, id, nombre, email y matrículas. 00:06:59
apunto get 00:07:30
email 00:07:34
y las matrículas que acabo de hacer 00:07:36
vale 00:07:38
ya tengo el servicio este 00:07:43
esto lo voy a bajar 00:07:45
aquí abajo y así se ve mejor 00:07:57
vale, pues entonces mi alumno 00:07:59
controller ya puede 00:08:15
llamar a 00:08:17
vamos a 00:08:22
mi alumno controller 00:08:24
ya puede 00:08:27
llamar a getAlumno 00:08:29
DTO 00:08:30
¿vale? 00:08:31
esta versión la hemos dejado comentada 00:08:34
ahora vamos a devolver 00:08:37
el DTO 00:08:39
me devuelve el DTO 00:08:39
y el que va a mapear a JSON es el DTO 00:08:42
ya está 00:08:45
y yo aquí en mi record 00:08:46
ahora ya, que quiero cambiar 00:08:48
las cosas y quiero 00:08:51
poner aquí 00:08:52
anotaciones JSON o quiero meter 00:08:54
campos en el DTO 00:08:57
o quiero lo que sea 00:08:58
pues hago lo que me dé la gana, siempre y cuando en el servicio 00:09:00
lo rellene el alumno DTO 00:09:03
con los campos buenos de la consulta 00:09:05
yo tengo que transformar 00:09:07
de alumno normal a alumno DTO, lo tengo que transformar 00:09:08
¿vale? pero yo aquí en mi DTO 00:09:10
meto lo que me dé la gana 00:09:12
da igual, no pasa nada, lo ensucio 00:09:14
transformo los campos 00:09:16
hago lo que sea, no pasa nada 00:09:18
este si es su sitio, el sitio para hacerlo 00:09:20
pero el sitio nunca sería 00:09:22
el modelo, aquí nunca sería 00:09:24
Pues me apetece que en esta consulta salga algo 00:09:26
Pues le voy a meter aquí un modelo 00:09:28
Y luego en el servicio que me cree este campo 00:09:30
No, alumno y matrícula no lo tocamos 00:09:32
Son las tablas, ya está 00:09:35
Pero aquí tocamos y hacemos lo que nos da la gana 00:09:36
Vale, pues vamos a ver 00:09:39
Si hemos hecho esto bien 00:09:42
Pues sí, lo hemos hecho estupendo 00:09:44
Vamos a quitar el ID a las matrículas 00:09:57
Porque es que como lo hemos dejado igualito 00:10:01
Es que ni siquiera vemos la diferencia de cómo estaba antes 00:10:03
Pero es que como 00:10:05
Tú siempre protestando 00:10:09
Pues no me apetece a mí que salga 00:10:11
Vamos a quitar el ID de matrícula de Teo 00:10:13
Para que no me salga el ID 00:10:25
Entonces eso significa 00:10:25
Que aquí en mi matrícula de Teo 00:10:27
Le quito este campo 00:10:30
Le quito este campito cuando la construyo 00:10:31
¿Vale? 00:10:34
Le quito este campito aquí en el constructor 00:10:35
Vamos a ver 00:10:38
Venga, dame el alumno 1 00:10:42
Pumba, aquí está mi alumno 1 00:10:50
Mucho más bonito, sin idea de matrícula 00:10:54
¿Vale? 00:10:56
Pues la forma de 00:10:57
Uy, ¡ah! 00:10:59
Claro, cuando yo toco esto 00:11:02
Este ordenador se vuelve loco 00:11:04
Claro, la sensibilidad de la pantalla 00:11:05
Está conectada a este equipo de aquí 00:11:10
bueno pues 00:11:12
que bonito y que chulo y que bien 00:11:15
pero 00:11:17
nos falta 00:11:19
y con esto ya, bueno la verdad es que 00:11:21
nos faltan hacer métodos muchísimo 00:11:23
mejores y más guapos en el repository 00:11:25
pero 00:11:27
vamos a hacer 00:11:32
para consultas está claro 00:11:36
esta es la película y no hay más película 00:11:38
que esta, ya está 00:11:40
Luego, ¿qué más película hay? 00:11:42
Pues que yo me haga métodos en el repositorio 00:11:44
Súper chulos 00:11:47
Para hacer cosas 00:11:48
Recuperar alumnos, por ejemplo 00:11:49
Imaginaos que queremos 00:11:51
Recuperar 00:11:53
Todos los alumnos que estén matriculados 00:11:55
En una asignatura 00:11:57
Podría ser una consulta 00:11:59
Que yo quiero hacer perfectamente 00:12:02
Quiero hacer un 00:12:04
Una API REST 00:12:05
Que yo ponga 00:12:09
Nombre, asignatura 00:12:10
y me saque los nombres de los alumnos. 00:12:11
Eso estaría muy bien, hacerlo por API REST. 00:12:15
Vale, pues entonces, ¿en qué chip nos pondríamos para hacer eso? 00:12:18
Primero, necesito un método de repositorio, 00:12:21
un método de servicio que lo haga, lógicamente. 00:12:23
El método de servicio necesita un método de repositorio. 00:12:26
Vale, pues entonces, recuperar alumnos por nombre asignatura. 00:12:29
¿En qué repositorio lo pondríamos? 00:12:34
¿Alumno repository o matrícula repository? 00:12:35
Recuperar alumnos. 00:12:40
¿Alumnos? 00:12:41
Recuperar alumnos. 00:12:42
El sitio es el tipo de dato devuelta, no el tipo de dato por el que filtras. 00:12:43
Tú puedes filtrar por matrícula, por Pepito Pérez, por tamaño de las orejas. 00:12:49
Pero lo que marca es lo que tú devuelves. 00:12:54
Luego, nos iríamos a alumno repository. 00:12:57
Sí, es verdad que surgió contigo sobre qué criterios para colocarlo. 00:13:03
El tipo de dato devuelta. 00:13:08
Entonces, alumno repository. 00:13:10
Estoy en el buen sitio, sí 00:13:12
Vale, me voy a hacer ese método 00:13:14
Este no va por clave primaria 00:13:16
Luego este me va a devolver 00:13:22
Aquí nada de alumno DTO 00:13:24
No, no, no 00:13:26
Esto está tocando al modelo, a la base de datos 00:13:27
Entonces el repositorio trabaja con el modelo 00:13:30
El que trabaja con DTO si quiere es el servicio 00:13:32
El servicio sí, el repositorio no 00:13:36
Aquí no ve DTO ni ve nada 00:13:38
Porque me devuelve de la base de datos 00:13:40
Vale, entonces 00:13:42
Aquí podríamos hacerlo como query 00:13:43
¿Verdad? 00:13:46
Pero 00:13:48
Recordad que uno podría hacer métodos propios 00:13:48
Que ansiedad me produce que me lo ponga así en azulito 00:13:56
Bueno 00:13:59
Pero recordad que uno puede hacer métodos propios 00:14:00
Si respetan ciertas reglas 00:14:03
Con el, con esto 00:14:05
Por ejemplo, si alumno 00:14:06
Tiene una cosa que es nombre, ¿no? 00:14:08
Por ejemplo 00:14:10
Recordad que si yo pongo 00:14:11
Esto 00:14:14
String nombre 00:14:16
Pues, ah, ya me lo ha quitado 00:14:19
Menos mal, me está dando mucha angustia 00:14:22
Vale, recordad que 00:14:24
Si ponemos esto, automáticamente 00:14:26
Ya genera una consulta 00:14:28
Que es select by un campo 00:14:30
Que sea nombre, con la n en minúscula 00:14:32
¿Lo hay? 00:14:34
Si lo hay, entonces estupendo, todo va a funcionar 00:14:36
No lo hay, pues lo hemos liado 00:14:38
¿Lo hay? 00:14:39
si lo hay, hay un campo de nombre 00:14:40
o podría recuperar por email o lo que fuera 00:14:43
¿vale? 00:14:45
pero también podemos recuperar 00:14:46
por campos dentro 00:14:49
de campo sin hacer la query 00:14:51
podemos hacer la query, que el otro día de hecho 00:14:53
para hacer eso, recuperábamos clientes 00:14:54
por concepto de pedido 00:14:57
nos hicimos una query 00:14:59
pues no hace falta, este sería lo mismo 00:15:00
recuperamos alumnos 00:15:02
por nombre de la asignatura 00:15:05
pues entonces yo puedo 00:15:07
Poner, bye 00:15:09
Alumno, ¿qué tiene dentro? 00:15:10
Matrículas 00:15:13
Me quiero meter en matrículas 00:15:14
Pues pongo 00:15:16
Matrículas 00:15:18
Y ahora dentro de matrículas 00:15:24
Me quiero meter, ¿dónde? 00:15:26
Este 00:15:29
Pues asignatura 00:15:29
Siempre empezando por mayúscula 00:15:32
Como los get 00:15:34
Y aquí pues nombre asignatura 00:15:35
¡Hala! Pues la query 00:15:38
Me la va a hacer solito 00:15:41
Se mete dentro de alumnos 00:15:41
Se mete en matrículas 00:15:46
Y dentro de matrículas busca 00:15:47
Las asignaturas 00:15:49
Dentro de las matrículas del alumno 00:15:55
Que se llamen así 00:15:57
Y te devuelve el alumno 00:15:59
Que encuentra asignaturas 00:16:01
Y ya está y te hace la cuernisola 00:16:02
Entonces te puedes ir metiendo 00:16:04
Sí, lo que pasa es que 00:16:05
Normalmente en un modelo con base de datos 00:16:09
como las claves llegan hasta donde llegan 00:16:11
no sueles tener anidado 00:16:14
hasta más de un nivel de anidamiento 00:16:15
aquí lo único que ocurriría es que 00:16:17
si un alumno 00:16:20
estuviera matriculado 00:16:21
de la misma asignatura dos veces 00:16:24
me lo metería en la lista 00:16:26
dos veces 00:16:28
pero es que aún así Sprint estar apañado 00:16:29
que aún así se puede arreglar porque 00:16:36
él admite el este 00:16:38
Disting 00:16:39
Incluso eso se puede arreglar 00:16:40
Entonces, ¿qué quiero decir? 00:16:44
Que hay un mundo de posibilidades 00:16:46
Para hacer métodos 00:16:48
Solo con los nombres sin las queries 00:16:50
Que cubrirían 00:16:51
Pues a lo mejor el 80, el 85% 00:16:53
El 90% de todo lo que uno necesita hacer 00:16:56
En una aplicación normal 00:16:57
Claro, cuando ya quieres hacer pues 00:16:59
JoinFetch o cosas más específicas 00:17:01
Pues plantas la query y ya está 00:17:04
O simplemente cuando no te acuerdas 00:17:05
Como me ocurre a mí en la mayoría de los casos 00:17:06
que no me acuerdo que hay una sintaxis 00:17:08
que te... 00:17:10
¿Haces tu query? 00:17:11
¿Haces la query? 00:17:12
¿O algo? 00:17:13
O sea, esto no te cargaría 00:17:13
el alumno con todo. 00:17:15
Bueno, esto depende del lazy. 00:17:18
¿Vale? 00:17:20
Claro, si tú quieres saltarte el lazy, 00:17:21
te pones aquí una query con el join fetch. 00:17:24
¿Vale? 00:17:27
Vale, pues entonces, 00:17:28
ahora, 00:17:30
lo que os dejaría a vosotros, 00:17:32
pues haced el método de servicio, 00:17:34
el método de controller, 00:17:36
para que vosotros pongáis aquí 00:17:37
en la URL 00:17:40
pues API alumnos y un nombre 00:17:41
de asignatura, ah no, eso no puede ser 00:17:44
porque se confundiría con esta otra 00:17:46
pues por ejemplo, API alumnos 00:17:47
asignatura barra 00:17:50
un nombre y que devuelva 00:17:52
todos los alumnos matriculados de esa asignatura 00:17:54
por ejemplo, ¿vale? 00:17:55
entonces, faltaría hacer 00:17:58
método de servicio, DTO 00:17:59
si hace falta porque no se pueden reutilizar esos 00:18:02
y el método del controller 00:18:04
en la ruta correspondiente 00:18:05
para que si me pone aquí 00:18:07
matemáticas. 00:18:08
Le salgan los alumnos 00:18:10
que tienen matemáticas. 00:18:12
Que no quiere que le salgan 00:18:13
los alumnos con todos 00:18:15
los datos completos. 00:18:16
Se tendría que hacer 00:18:17
un alumno de TO para ellos. 00:18:18
Si no se hace un alumno 00:18:19
de TO para ellos, 00:18:20
le salen los alumnos 00:18:21
por todo. 00:18:22
¿Vale? 00:18:23
Pues venga, 00:18:24
pues eso lo dejamos 00:18:25
para que lo hayáis vosotros. 00:18:26
Y ahora, 00:18:27
esto. 00:18:29
Bueno, pues todo lo que 00:18:34
estamos haciendo son consultas. 00:18:35
y consultas como veis se pueden hacer 00:18:41
pero que pasa si quiero yo 00:18:43
insertar datos 00:18:46
dime 00:18:47
claro 00:18:48
claro, tu primero tendrías que hacer tu método 00:18:55
de servicio, está claro que es 00:18:58
recuperame alumnos por asignatura 00:18:59
te haces tu método de servicio que llama a este 00:19:02
ese no tiene mayor problema 00:19:04
que problema tiene, que lo que te devuelve 00:19:05
tu ya no quieres que sea 00:19:08
a un alumno, sino una list de alumnos, 00:19:10
una list de alumnos DTO. 00:19:11
Con lo cual tendrás que transformarlo. Luego en el servicio 00:19:13
tienes como dos problemas. 00:19:16
Llamar al método, ese fácil, 00:19:18
y luego la lista de alumnos, transformar la lista 00:19:19
de alumnos DTO. 00:19:22
Reutilizas el mismo DTO 00:19:24
si quieres que en esta 00:19:26
que en este resultado te salga 00:19:27
todos los datos de cada alumno. 00:19:29
Te haces otro DTO si quieres que 00:19:31
en esa consulta solo te salga 00:19:33
nombre del alumno, por ejemplo. 00:19:35
Eso por un lado. Eso en el servicio. 00:19:38
Y luego, en el controller, tendrías que hacerte otro de estos. 00:19:40
Otro de estos con otra ruta distinta. 00:19:45
¿Vale? 00:19:49
Y aquí que llamara a ese método de servicio. 00:19:50
Y ya está. 00:19:53
¿Vale? 00:19:54
No habría que hacer más que eso. 00:19:54
Venga, esto es rápido en realidad. 00:20:07
Si no sale a la primera, rápido. 00:20:09
Para consultas está claro. 00:20:11
Ahora vamos a intentar a través de nuestra API REST, 00:20:12
vamos a intentar meter cosas también, 00:20:17
darle mi alumno y que lo 00:20:19
inserte, o sea, darle 00:20:21
yo datos. Se los tengo que dar en JSON. 00:20:23
En la URL. 00:20:25
O en la petición 00:20:27
HTTP, que puede ir en URL 00:20:29
si es GET o en el cuerpo si es 00:20:31
POST. En este caso va a ser POST, porque 00:20:33
no puedes mandar un JSON como 00:20:35
parámetros de... 00:20:37
Hombre, sí, como poder puedes un pedazo de string que 00:20:39
te cagas y que lo recupere como request 00:20:41
param y lo vuelque. Pero, hombre, 00:20:43
es feo. Aparte de que estás 00:20:45
mandando. Todos los datos del alumno 00:20:47
ahí. 00:20:49
¿Puedes poner 00:20:52
algunos? 00:20:53
Hombre, 00:20:57
mandabas un fichero de texto entero 00:20:59
en la URL de arriba. 00:21:01
Hace años, o sea, a principios de los 2000 00:21:02
que las páginas web hacían muchas cosas de esas. 00:21:04
Hace años, joder. 00:21:06
Ya, pero a principios de los 2000 00:21:07
estábamos todos pensando en otras cosas. 00:21:10
Bueno, vosotros ni pensabais. 00:21:13
Ahora tampoco. 00:21:15
Bueno 00:21:17
Jolín, pues si quieres enano 00:21:24
Tú, ¿no? 00:21:29
O sea, tus padres fue conocerse y tenerte 00:21:30
Porque vamos 00:21:33
Estamos hablando del 2000 00:21:34
Madre del amor hermoso 00:21:35
Eso es lo que tener claridad de ideas 00:21:41
Yo quiero un padre 00:21:46
es un padre de mi hijo 00:21:47
oye a ver 00:21:49
ahora va a salir el tema escabroso 00:21:51
la pregunta de, pero seguro que fuiste deseado 00:21:52
pero mejor la dejamos para luego 00:21:55
venga 00:21:57
controller 00:21:59
que bonito es el amor 00:22:02
¿y siguen juntos a todo esto? 00:22:08
oye, porque es que 00:22:11
no, porque una cosa tan rápida 00:22:12
Y yo le diría, joder, se precipitaron, pero mira, ¿no? 00:22:15
No se precipitaron 00:22:17
Su amor es verdadero 00:22:18
Y en un garito, además 00:22:21
O sea, todas las papeletas para que fuera un desastre 00:22:27
Nada, una historia muy bonita, hombre 00:22:29
Di que sí 00:22:38
Bueno, pues entonces 00:22:41
como nosotros no queremos 00:22:45
todo esto venía a cuento 00:22:47
queremos pasar nuestro JSON con datos 00:22:48
en la URL, no, aunque antes de que 00:22:51
naciera Pablo lo hicieran, pero nosotros ya 00:22:53
no lo hacemos, entonces queremos que la 00:22:55
petición sea post, vale 00:22:57
pues vamos a hacernos un método 00:22:59
pero no anotado con 00:23:00
con get 00:23:03
sino con post, vale 00:23:05
anotado con get sino con post 00:23:07
entonces 00:23:09
donde queremos que cuelgue 00:23:10
si yo no le pongo aquí nada 00:23:15
cada vez que llega una 00:23:16
petición post 00:23:19
con esta url 00:23:20
siendo post, va a buscar en el 00:23:22
request, en el body, el json 00:23:25
lo va a insertar y ya está 00:23:27
entonces lo puedo dejar así, pero bueno 00:23:28
como puede que haya más post de modifica 00:23:30
de no se que, pues vamos a hacerle 00:23:33
aquí, venga, cuando 00:23:35
yo te haga un insert 00:23:36
vale, por ejemplo 00:23:38
vale, a ver 00:23:40
entonces, este 00:23:41
método le damos un hombrecito público vale no que nos devuelva el alumno 00:23:44
insertado pues para ver por ejemplo su idea y todo eso no esto es lo inserta y 00:24:02
no lo da de vuelta, tú lo puedes ignorar si quieres 00:24:08
vale, lo puedes ignorar 00:24:10
y ahora 00:24:12
pues este 00:24:13
pues para ver 00:24:15
el ID autogenerado, por ejemplo 00:24:18
porque a la hora de hacer la persistencia 00:24:20
tú el ID no se lo puedes pasar 00:24:23
pero genera él 00:24:24
insert y ahora 00:24:25
aquí hay que decirle 00:24:28
oye tú 00:24:30
lo que 00:24:31
tienes que coger, cógelo 00:24:34
del 00:24:37
Cógelo del body 00:24:37
¿Vale? 00:24:44
Del body tienes que coger el parámetro 00:24:48
El dato, ¿vale? 00:24:51
Del body 00:24:52
Y lo tienes que mapear a un DTO 00:24:53
¿Vale? 00:24:56
¿Nos vale el DTO de antes? 00:24:58
Bueno, nos vale 00:25:01
Porque el DTO de antes tiene un campo id 00:25:02
Y nosotros cuando le pasemos un alumno 00:25:04
Le vamos a pasar el id 00:25:06
le pasamos el nombre y el email 00:25:07
lo queremos hacer pasándole matrículas 00:25:10
también, bueno, pues ni siquiera 00:25:12
podríamos construirlo con las matrículas 00:25:13
un JSON con todas las matrículas y pasárselo 00:25:15
pero no vamos a hacer un JSON más sencillo 00:25:17
pero lo que sí que le vamos a pasar 00:25:19
es el ID, entonces este DTO 00:25:22
no nos vale 00:25:24
porque, claro, porque esto es para 00:25:25
insertar, entonces el ID lo va a generar 00:25:30
solo la base de datos, tú insertas 00:25:32
un alumno con nombre e email, entonces 00:25:33
le tenemos que pasar un objeto que no tenga 00:25:35
el id, entonces un alumno de teo 00:25:37
no me vale y un alumno por supuesto tampoco 00:25:39
pues un alumno 00:25:41
inserta 00:25:44
de teo 00:25:45
y tan ricamente, no pasa nada, nos hacemos todos 00:25:46
los de teos que sean necesarios 00:25:49
si para eso estamos 00:25:51
en la clase alumno 00:25:52
el constructor tiene que tener 00:25:53
como para un id 00:25:56
en la clase alumno a secas 00:25:58
a ver 00:26:06
Que quería hacer aquí 00:26:08
A parar esto 00:26:11
Juro que nos da tiempo 00:26:12
Os lo prometo 00:26:14
¿Tenéis arrancado el postman incluso? 00:26:15
Nos da tiempo 00:26:19
Vale, es que 00:26:20
A ver, que no nos podemos ir así 00:26:21
¿Eh? 00:26:26
¿Eh? 00:26:28
¿Cómo hacer ojo en cinco? 00:26:32
Vale, entonces 00:26:35
A ver, es cierto que nos falta 00:26:36
Hacer el alumno inserta DTO 00:26:40
Nos falta hacer el método de servicio 00:26:42
Que se hacen dos patadas 00:26:45
Ah, bueno, sí, sí, perdón 00:26:47
Nos falta el nombre de la variable 00:26:51
Que es DTO 00:26:53
¿Vale? 00:26:55
Nos falta hacer el método de servicio 00:26:56
¿Vale? 00:26:58
Entonces, aquí 00:27:04
Bueno, vamos a hacer hasta donde nos dé tiempo 00:27:06
Entonces vamos a hacer nuestro DTO 00:27:10
Alumno inserta DTO 00:27:12
Que es que me estoy angustiando 00:27:13
Por vuestra culpa todo 00:27:15
A ver 00:27:17
Alumno inserta DTO 00:27:18
Vale 00:27:26
El alumno inserta DTO 00:27:26
Solo queremos que tenga 00:27:28
Nombre 00:27:33
Y un email 00:27:36
Ala, tan bonito 00:27:42
Ya está, el DTO 00:27:44
Finiquitado 00:27:46
Vale 00:27:48
No, no, no, no 00:27:49
Porque yo creo que el alumno que me devuelva 00:27:52
Sea con el campo ID 00:27:54
Vale, entonces alumno DTO 00:27:57
Si tiene el ID 00:27:59
Vale, entonces alumno inserta 00:27:59
DTO, ya lo tengo 00:28:03
Vale, entonces, ahora 00:28:04
¿Qué me tiene que devolver esto? 00:28:06
Pues el método de servicio 00:28:09
Ahora vamos a hacer 00:28:10
El método de servicio que nos falta por hacer 00:28:11
Create 00:28:14
Créame 00:28:16
Este 00:28:19
Este método de servicio 00:28:21
Lo tenemos que hacer ahora 00:28:24
Este es el método de servicio 00:28:25
Que yo le paso este DTO 00:28:28
Y me hace el save 00:28:30
Del repositorio 00:28:31
Entonces 00:28:33
Y me tiene que volver un DTO construido 00:28:35
a partir de esto. Entonces, venga, alumno service, ¿dónde está? Pues alumno service, public, alumno de teo, create, le paso un alumno inserta, inserta de teo, de teo, vale. 00:28:38
Entonces, ¿qué tiene que hacer este? Pues este, lo que tiene que hacer es construir un alumno con estos datos y hacerle el save, ¿vale? No, un alumno normal, porque este llama al repositorio. 00:29:04
alumno a 00:29:20
igual 00:29:21
a new alumno 00:29:23
y ahora 00:29:26
a.setEmail 00:29:27
dto. 00:29:30
dto. 00:29:33
Debería estar el get 00:29:40
dto. 00:29:42
No, no es el momento de que nos pasen cosas. 00:29:44
Sí, a mí me llevan pasando eso. 00:29:50
Ah, perdón 00:29:51
Tienes toda la razón 00:29:56
Vale 00:30:02
A ver, ¿qué me estoy poniendo a poner? 00:30:03
Sed 00:30:06
Fatal 00:30:06
Me siento fatal 00:30:08
Vale, entonces 00:30:10
¡Nya, ña, ña! 00:30:15
pero yo no me pongo tan repelente 00:30:18
repo alumno 00:30:22
punto save 00:30:25
vale 00:30:26
save 00:30:27
y ahora, para construir el DTO 00:30:31
necesitamos el id 00:30:34
que no lo sabemos, pero es que este save 00:30:35
del repositorio es tan listo 00:30:38
que nos devuelve el objeto persistente 00:30:40
pues vamos 00:30:42
a guardarlo aquí 00:30:44
el persistido 00:30:46
El persistido 00:30:47
Y ahora yo ya me hago un DTO 00:30:49
Que es el que devuelvo 00:30:50
Pues me hago 00:30:51
Alumno DTO 00:30:55
Que tenga 00:31:00
Que tenga 00:31:02
Upper.get 00:31:04
Coma 00:31:08
Upper.get 00:31:10
Nombre 00:31:13
alumnopersistente.get 00:31:14
email 00:31:19
y alumno.get 00:31:21
matrículas, que será vacío 00:31:24
pero bueno, como el constructor 00:31:26
del DTO lo pide 00:31:27
return new 00:31:29
el del DTO 00:31:32
alumno sí, pero era matrícula de DTO 00:31:38
entonces tendría 00:31:40
que pasar las matrículas 00:31:42
a DTO 00:31:44
Pero 00:31:46
Sí, haciéndolo otro 00:31:47
Esto de aquí, efectivamente 00:31:50
Esto de aquí 00:31:52
Qué rápidos sois 00:31:53
Vale, entonces me hago esto de aquí 00:31:57
Y le paso más 00:32:01
Vale 00:32:03
Y esto sería de 00:32:09
Aper, muy bien 00:32:14
Aunque bueno, va a estar vacía la lista, pero bueno 00:32:15
a perder matrículas, bla, bla, bla 00:32:18
y lo demás está bien, ¿no? 00:32:21
vale 00:32:24
venga, pues entonces 00:32:24
ya tengo el método de servicio 00:32:27
completamente hecho 00:32:29
que le paso el alumno inserta DTO 00:32:31
y me devuelve el alumno DTO 00:32:33
ahora, el controller 00:32:34
el controller, la respuesta de inserta 00:32:35
si yo soy capaz 00:32:39
de pasarle en el body 00:32:40
un alumno inserta DTO 00:32:42
me lo insertará 00:32:44
y me lo devuelve 00:32:46
con su ID y con todo si yo quiero manejarlo 00:32:48
vale, pues ahora 00:32:50
esto ya es lo último 00:32:52
que nos falta 00:32:54
no sé cuál es tu pregunta 00:32:55
¿por qué no se va a pasar bien? 00:32:58
se pasa muy bien 00:33:03
se pasa estupendo 00:33:04
vale, ahora, ¿cómo paso yo 00:33:05
cómo hago yo una petición post 00:33:08
con un JSON en el body? 00:33:10
pues hombre, desde el navegador casi que no 00:33:11
postman 00:33:14
Pues ahora es cuando arrancáis Postman, que es un cliente para hacer peticiones GET y POST a un navegador de forma muy simple, ¿vale? Entonces, arrancamos Postman, vemos a ver si funciona y solucionamos. 00:33:15
claro, pues con Postman 00:33:32
que es el cliente 00:33:37
típico para hacer pruebas 00:33:39
de los API REST 00:33:41
vale 00:33:42
entonces 00:33:43
fijaos en Postman, en Postman tú le dices 00:33:45
la ruta 00:33:49
en la que está 00:33:51
el API REST colgando 00:33:53
si el método es POST 00:33:54
o GET y aquí le pasas 00:33:56
los parámetros, el cuerpo 00:33:59
que es lo que nos importa aquí a nosotros 00:34:00
entonces, yo, bueno, espera 00:34:02
voy a relanzar esto 00:34:04
voy a relanzar el este, no vaya a haberlo liado 00:34:06
con lo que he hecho, y empieza a apretar 00:34:08
todo 00:34:10
bueno, la aplicación 00:34:11
se lanzó 00:34:17
la aplicación se lanzó, ahora, ¿dónde está escuchando? 00:34:17
la mía está escuchando en API alumnos 00:34:20
inserta 00:34:22
entonces, API 00:34:24
API alumnos 00:34:26
inserta, aquí está 00:34:32
y es post, ¿vale? 00:34:34
Bueno, aquí va 00:34:36
A ver 00:34:37
API alumnos, inserta 00:34:39
Vale, esta es mi ruta 00:34:42
Del API REST, quiero que vaya por post 00:34:44
Lo que me importa es el body 00:34:46
El body 00:34:48
Vale, el body 00:34:50
Quiero que yo sea Jason, pues lo pongo aquí 00:34:52
Vamos a ver 00:34:54
Aquí en mi DTO 00:34:56
Alumnos, inserta DTO 00:35:00
Es nombre e email 00:35:02
No hay anotaciones 00:35:04
JSON, con lo cual 00:35:05
Tiene que llamarse nombre e email 00:35:07
Efectivamente 00:35:10
Esto mapea a la perfección 00:35:11
Esa entidad, vale 00:35:13
Lo mapea a la perfección 00:35:15
Ya está 00:35:16
Y ahora cuando ya he puesto el cuerpo 00:35:25
Yo le doy a send 00:35:27
Perfecto 00:35:29
Me lo inserta 00:35:32
Aquí me ha devuelto el DTO 00:35:34
¿Veis? El DTO 00:35:36
matrículas vacías como era de esperar 00:35:38
el ID, el 5 00:35:40
si lo voy a 00:35:42
verificar en la base de datos, lógicamente 00:35:44
que me ha insertado el alumno 00:35:46
y aquí tengo mi alumno 00:35:48
¿vale? pues magnífico 00:35:50
pues ya está, con esto 00:35:54
podéis hacer 00:35:57
cualquier cosa, cualquier microservicio 00:35:58
API REST con Spring Boot, ya está 00:36:00
no hay que saber más 00:36:02
a ver, ¿qué más 00:36:04
cosas luego hay? 00:36:06
¿Qué cosas me he saltado? 00:36:08
Validaciones. 00:36:11
La parte de Spring de validación. 00:36:12
Spring Security, por supuesto. 00:36:13
Pues hay un montón de módulos. 00:36:16
Spring Security, Spring Validation, 00:36:18
Spring no sé qué. 00:36:20
Vale, pero esto es el... 00:36:21
Spring ya te regula la seguridad 00:36:23
de los títulos que hacías antes de las inserciones 00:36:25
de SQL dentro de la URL. 00:36:27
La gente hacía inserciones 00:36:31
de URL para... 00:36:32
No, claro, es que aquí inyección no puedes hacer 00:36:34
Porque aquí los campos no van por 00:36:36
O sea, tú puedes meter un campo 00:36:40
Que va a ir al final al repositorio 00:36:42
Desde la url 00:36:44
Pero ese no va a ir concatenado 00:36:45
Claro, la bjbc de debajo no 00:36:47
O sea, inyecciones SQL 00:36:49
No se puede hacer, no hace falta que pongas Spring Security 00:36:51
No hace falta 00:36:53
Bueno, pues habéis visto que bonito y que bien todo 00:36:54
Eh... 00:36:58
Materias:
Programación
Niveles educativos:
▼ Mostrar / ocultar niveles
  • Formación Profesional
    • Ciclo formativo de grado superior
      • Segundo Curso
Subido por:
Raquel G.
Licencia:
Todos los derechos reservados
Visualizaciones:
1
Fecha:
10 de febrero de 2026 - 13:56
Visibilidad:
Clave
Centro:
IES ROSA CHACEL
Duración:
37′
Relación de aspecto:
1.78:1
Resolución:
1920x1080 píxeles
Tamaño:
154.67 MBytes

Del mismo autor…

Ver más del mismo autor


EducaMadrid, Plataforma Educativa de la Comunidad de Madrid

Plataforma Educativa EducaMadrid