20251106 EjemploAppWeb_Spring_2 - Contenido educativo
Ajuste de pantallaEl ajuste de pantalla se aprecia al ver el vídeo en pantalla completa. Elige la presentación que más te guste:
Vale.
00:00:00
Bueno, pues, entonces, este es un main para arrancar sprint,
00:00:01
no para arrancar la aplicación web.
00:00:07
Y ahora ya, sprint cuando arranque,
00:00:09
arranca la aplicación web, la monta.
00:00:11
En nuestro caso, además, arrancará el Tomcat embebido.
00:00:14
Bueno, todo el pifostio.
00:00:16
Vale.
00:00:19
Y ya está el fichero de configuración,
00:00:21
que no tiene nada porque no hay nada de configurar.
00:00:23
Y aquí podemos poner las vistas, ¿vale?
00:00:26
en vistas. Entonces vamos a hacer
00:00:29
por ejemplo
00:00:31
una primera vista
00:00:32
como estamos haciendo
00:00:34
la misma aplicación que hemos hecho antes
00:00:36
pues entonces
00:00:39
¿cuál era nuestra
00:00:41
primera vista?
00:00:43
El index, ¿verdad?
00:00:45
El index era la página raíz de nuestra aplicación
00:00:47
la que nos daba el formulario
00:00:49
para arrancar el JSON
00:00:51
Bueno, pues copiad
00:00:52
el index
00:00:54
copiáis el index
00:00:56
y lo ponemos
00:01:00
aquí
00:01:02
del otro proyecto
00:01:03
aquí está nuestra página raíz
00:01:10
sube tu archivo xml
00:01:15
bla bla bla, seleccionas archivo
00:01:17
etcétera
00:01:19
bueno, entonces
00:01:20
el controlador
00:01:21
ahora ya necesitamos el controlador
00:01:25
porque el controlador es el que
00:01:26
cuando le demos la ruta
00:01:28
por defecto, que es la barrita asignada
00:01:30
la ruta por defecto, el controlador
00:01:33
tiene que irse a este
00:01:35
índex, ¿vale? Ahora ya no hay
00:01:37
servlets que respondan a urls
00:01:39
ahora hay un controlador
00:01:41
que para cada url posible
00:01:43
te renderiza o te lleva
00:01:45
a una página, dime
00:01:47
Estamos haciendo
00:01:48
la misma aplicación que hemos hecho antes
00:01:53
la queremos replicar aquí
00:01:55
de la aplicación anterior, ¿cuál era la
00:01:56
página raíz? La que arrancaba
00:01:59
al principio de la aplicación, el index
00:02:01
el formulario este index
00:02:03
que me decía que subía el archivo
00:02:05
bueno, pues esta página, que es
00:02:06
la página raíz de mi aplicación
00:02:08
la quiero en mi nueva aplicación, lógicamente
00:02:10
la he movido
00:02:13
la he copiado aquí, ¿vale?
00:02:14
porque estamos construyendo, esa misma aplicación
00:02:17
la estamos construyendo, pero ahora con esta
00:02:19
estructura, vale, pues esta es
00:02:20
mi página raíz, ahora ya
00:02:23
sí que sí necesito el controlador
00:02:25
porque aquí lo que hay
00:02:26
es una clase controladora
00:02:29
que a cada posible
00:02:31
URL que yo invoco
00:02:33
decide que me devuelve.
00:02:35
Bueno, pues este index
00:02:38
es lo que me va a devolver
00:02:39
a la ruta base, a la base.
00:02:41
Cuando yo le dé la base
00:02:43
me devolverá este index.
00:02:45
¿Verdad?
00:02:47
Es lo que nos pasa
00:02:49
aquí cuando nosotros
00:02:50
ejecutábamos esto, cuando yo le dé
00:02:53
la base, que esta es la ruta base,
00:02:54
cuando yo le dé la ruta base
00:02:57
me lleva el index
00:02:59
pues esto
00:03:01
lo va a hacer el controlador
00:03:03
el controlador es cuando vea que yo le doy
00:03:05
la ruta base, me da esta
00:03:07
página index
00:03:09
vale
00:03:10
pues a ver
00:03:12
vamos a hacer el controlador
00:03:14
bueno pues nos vamos a hacer
00:03:16
un paquete para el controlador
00:03:19
partimos del raíz
00:03:21
este es mi paquete
00:03:26
para los controladores
00:03:35
ojo
00:03:36
Spring
00:03:38
tiene que, perdón
00:03:40
este que me arranca Spring
00:03:42
esta clase main que me arranca
00:03:44
Spring, la main, tiene que estar
00:03:47
en la cima de la jerarquía de Spring
00:03:49
para encontrar el resto
00:03:50
si no está en la cima va a tener ahí un problema
00:03:51
para encontrar los bins
00:03:55
bastante gordo
00:03:56
este está en la cima de mi jerarquía
00:03:58
y ahora yo ya me hago los paquetes
00:04:00
que me den la gana a partir de esa cima
00:04:03
y pongo, pues bueno, uno en particular
00:04:05
para el controlador, vale, la idea es irlo
00:04:06
pues venga, vamos a hacernos
00:04:09
el controlador
00:04:11
ala, llamadlo
00:04:12
como os dé la gana
00:04:21
webapp
00:04:22
controller
00:04:25
ala, este es mi controlador
00:04:26
aquí dentro
00:04:29
habrá una colección
00:04:31
de métodos y cada uno de esos métodos
00:04:33
será la respuesta
00:04:35
a cada una de las urls
00:04:36
que yo puedo invocar
00:04:39
de mi aplicación
00:04:40
pero para que este sea
00:04:41
realmente un controlador
00:04:45
se lo tengo que decir a Sprint
00:04:46
le tengo que decir Sprint
00:04:48
que este es el controller, ojo
00:04:49
como le digo que este
00:04:51
es el controller
00:04:55
anotando con mucho amor
00:04:56
porque si no
00:04:59
no me va a hacer caso
00:05:00
claro, porque si no no manipula
00:05:03
las cosas o con amor o a hostias
00:05:04
si no
00:05:06
ala
00:05:07
ya tengo el controller
00:05:11
el controller
00:05:14
es una de las
00:05:16
posibles clases de Spring
00:05:18
lo que Spring llama estereotipos
00:05:20
pero todo esto ya es
00:05:22
nomenclatura un poco particular suya
00:05:23
igual que el repositorio
00:05:25
el repositorio es otra posible clase
00:05:28
otro estereotipo
00:05:30
estereotipo
00:05:31
no, no hay un viewer
00:05:32
pero bueno, hay muchas cosas
00:05:36
yo que sé, no sé lo que hay, hay millones de cosas
00:05:39
vale, pues este es el controller
00:05:41
ahora ya aquí van nuestros
00:05:43
métodos, por ejemplo
00:05:45
vamos a hacer el método
00:05:46
que me devuelve
00:05:49
el método asociado
00:05:51
a la
00:05:53
a la página raíz
00:05:54
¿vale?
00:05:56
entonces
00:05:58
esta anotación siempre la mezclo con la otra
00:05:59
la anotación del
00:06:03
mapeo del controller
00:06:05
¿cuál era? ¿la tengo que mirar o me la dices?
00:06:06
la de request mapping
00:06:09
esa
00:06:11
request mapping, ¿verdad?
00:06:12
sí, en esa está
00:06:15
no, get mapping
00:06:16
vale
00:06:19
get mapping es para la de get
00:06:21
request mapping es la que te dice la raíz
00:06:23
vale, no, no, no, vale, pero
00:06:25
pues entonces
00:06:26
cuando yo pida
00:06:29
en la ruta
00:06:30
Y el nombrecito de la orientación de la barra siempre se me olvida.
00:06:36
Siempre la pongo cambiada también.
00:06:43
Esta.
00:06:44
Vale.
00:06:46
Qué tontería hago.
00:06:47
Vale.
00:06:49
Bueno, pues lo que ponga yo aquí ahora a continuación, ¿vale?
00:06:50
Lo que ponga yo aquí va a ser un método al que va a responder,
00:06:55
que va a invocar el controlador cuando yo pida la ruta base,
00:07:01
¿Vale?
00:07:06
Por get, que es la petición por defecto
00:07:08
Ahora tengo que ir a la ruta base
00:07:10
Vale, pues entonces
00:07:11
La ruta base me va a llevar aquí
00:07:13
A este método le llamo como me dé la gana
00:07:15
¿Qué quiero que me devuelva?
00:07:18
En este caso, una página web
00:07:20
Entonces, este método
00:07:22
Por ejemplo, pues
00:07:24
Muestra
00:07:32
Formulario raíz
00:07:34
Vamos a llamarlo como nos dé la gana
00:07:36
muestra
00:07:38
formulario raíz.
00:07:40
Vale. Y aquí
00:07:43
este, return
00:07:44
index.
00:07:46
Import.
00:07:54
Get mapping. Vale.
00:07:55
Entonces,
00:08:00
revisamos.
00:08:02
Este método
00:08:05
lo invoca el controlador cuando ve
00:08:06
una petición desde la ruta base,
00:08:08
desde la ruta raíz.
00:08:10
¿Qué hace? Nada, lo único que yo quiero es
00:08:12
que me devuelva una página
00:08:14
que me devuelva una página
00:08:16
entonces con return index
00:08:17
lo que yo le estoy diciendo
00:08:20
a Spring es que
00:08:22
me devuelva la página de
00:08:23
la carpeta templates que se llame
00:08:26
index de contenido web
00:08:28
¿vale?
00:08:29
¿y la raíz es como para que
00:08:30
vaya justo a la raíz y de ahí ya te puede coger
00:08:32
el index?
00:08:34
Bueno, la raíz es la raíz de la URL
00:08:36
es decir, es
00:08:38
esto, es esta ruta
00:08:39
es la ruta raíz, es esta, la que no tiene ningún
00:08:42
recurso después
00:08:44
la que no tiene ningún recurso después
00:08:45
entonces, pues cuando yo invoque
00:08:47
la ruta raíz
00:08:50
el controlador va a llamar a este método
00:08:51
que le llamo como me dé la gana
00:08:54
este controlador me devuelve una vista
00:08:55
podría devolverme algo más grande
00:08:58
que no fuera una vista, fuera un fichero
00:09:00
para descarga, algo más complicado
00:09:02
entonces aquí no sería un string
00:09:04
sería un response no sé qué
00:09:06
pero cuando me devuelve una vista sin más
00:09:08
una vista
00:09:10
sprint
00:09:12
lo puede identificar
00:09:13
como un string
00:09:16
con el nombre de la vista
00:09:17
¿vale?
00:09:19
entonces
00:09:22
vamos a ejecutarlos
00:09:23
a ver si ya esta aplicación sprint
00:09:26
arranca bien y cuando yo la arranco
00:09:28
me devuelve la vista
00:09:30
entonces
00:09:32
¿vale? pues entonces
00:09:34
¿dónde está la aplicación?
00:09:36
esta no es, es esta
00:09:38
en ejecutar
00:09:39
le ejecutáis como una aplicación
00:09:42
de Spring Boot
00:09:44
le ejecutáis así
00:09:45
él arrancará su Tomcat
00:09:47
embebido, no lo puede arrancar
00:09:52
porque el 8080 está ocupado
00:09:54
porque lo tengo ocupado con este otro
00:09:55
entonces mucho puerto
00:09:58
así que voy a parar este
00:09:59
servidor Tomcat
00:10:02
ya está parado
00:10:03
el 8080 es el HTTPS normal, ¿no?
00:10:04
el HTTPS
00:10:07
no, el HTTPS es el 840
00:10:08
4, 4, 3. El 8080
00:10:11
es un puerto que se suele
00:10:13
usar para pruebas locales web, pero
00:10:15
podríamos usar el 8085, no nos da igual.
00:10:16
El 80 es el por defecto.
00:10:19
Vale, entonces.
00:10:21
El HTTP es el 43.
00:10:23
HTTP es 80.
00:10:25
80. El 80.
00:10:27
El 80, pero 8080
00:10:29
es el que suele...
00:10:31
Vale. Los 1024 primeros
00:10:32
puertos son los que suelen tener
00:10:35
una aplicación asociada, que son los que
00:10:37
se llaman los puertos bien conocidos,
00:10:39
bien asignados, del 1024
00:10:41
hacia arriba, tú ya para tus
00:10:43
pruebas eliges lo que quieras
00:10:45
venga
00:10:46
segundo intento
00:10:48
que cierre el que
00:10:50
no, bueno, ya he parado
00:10:53
el servidor, ya está parado
00:10:57
vale, Spring Boot
00:10:58
se ha lanzado porque no me da errores
00:11:02
pero este, no, aquí
00:11:04
no, si tiene un navegador
00:11:07
integrado, no lo he encontrado, también es verdad que tampoco
00:11:09
me he puesto a buscarlo, así que vamos
00:11:11
a sacar el navegador de fuera
00:11:13
y ya está, venga
00:11:14
localhost
00:11:16
y tengo que poner
00:11:20
pues toda la
00:11:22
ruta, que es
00:11:23
todo esto
00:11:26
de ahí no lo puedo copiar
00:11:31
de donde lo puedo
00:11:33
copiar
00:11:36
la ruta
00:11:37
del
00:11:39
Properties. Parezco tonta.
00:11:42
Ahí.
00:11:44
Bueno, pues el 90% de mi tiempo
00:11:49
me siento así, así que
00:11:52
compartimos
00:11:53
sentimiento.
00:11:55
Vamos a ver.
00:11:59
No encuentra
00:12:04
el recurso. Algo hemos escrito mal.
00:12:05
Este no es... Este no lo ha buscado.
00:12:07
Algo hemos escrito
00:12:10
mal, for error
00:12:11
vale, no tiene especie
00:12:13
vale
00:12:14
a ver si va a ser porque me
00:12:17
falta el motor de vistas
00:12:23
un momentito, vamos a parar esto
00:12:24
vale
00:12:27
a ver
00:12:28
recopilo, porque lo había detenido
00:12:30
un momento hasta asegurarme de cuál era
00:12:33
el error, que creo que es este
00:12:35
vale, pues
00:12:36
Nos faltaba una dependencia
00:12:41
La dependencia que es capaz de entender
00:12:46
Ese manejo de las vistas
00:12:48
Y
00:12:49
Se ha puesto en rojito el pom
00:12:51
No pasa nada
00:12:54
Porque nosotros tenemos el truco
00:12:55
Que es ponerle aquí esta S
00:12:57
Ya está
00:13:00
Vale
00:13:04
Voy a
00:13:06
A ver si
00:13:08
Si fuera eso lo que ha hecho que no lo entendiera
00:13:09
Que estoy casi, solo casi
00:13:12
solo casi porque con sprint
00:13:14
nunca se puede estar seguro
00:13:17
bueno, vamos a ver
00:13:18
bueno, ¿por qué no te encuentras muchacho?
00:13:28
si te he escrito todo bien
00:13:34
no puede ser
00:13:35
vale, pues entonces
00:13:38
Ahora, ya está.
00:13:43
Ahora ya si ejecuto esto.
00:13:48
Pues aquí está.
00:13:53
Vale.
00:13:55
Entonces, ahora, lo siguiente que hace la aplicación,
00:13:55
venga, que lo siguiente que hace la aplicación es coger el
00:13:59
fichero y darle a subir.
00:14:02
¿Para qué?
00:14:07
Para matarme.
00:14:08
vale, vamos a hacer una cosa
00:14:10
vamos a
00:14:14
intentar, a ver si
00:14:15
como es un, lo que nos queda por hacer
00:14:18
es copiar y pegar de la chuleta que os he dicho
00:14:20
vamos a hacerlo, a ver si
00:14:22
nos funciona y luego ya os miro
00:14:24
los errores, ¿vale? cuando venga Estefano
00:14:26
va a empezar a soltar el rollo desde el principio
00:14:27
bueno, vamos a
00:14:29
intentar, como veis, lo que vamos a hacer ahora es copiar y pegar
00:14:35
vamos a intentar dejarla que funcione
00:14:38
y luego ya los diversos errores
00:14:40
vale, pues entonces
00:14:42
la siguiente ruta a la que tiene que responder
00:14:43
el controlador
00:14:46
es la ruta a la que invoca el index
00:14:46
que es
00:14:50
la de upload
00:14:51
pues hay que hacer un método
00:14:53
para el upload, vale
00:14:56
el cuerpo del método
00:14:57
upload
00:14:59
lo tenéis aquí
00:15:01
vale, dice cuerpo del
00:15:03
método del control el que procesa
00:15:06
el fichero. Este
00:15:08
es. Copia del cuerpo
00:15:10
del método. Lo pegamos en el
00:15:12
método y ahora lo leemos, pero es que no tiene nada.
00:15:13
Vámonos al controller.
00:15:16
Venga. El controller.
00:15:17
Este.
00:15:21
Post mapping
00:15:27
porque este estamos enviando
00:15:28
un fichero, luego lo hacemos por post.
00:15:30
Vale. ¿A qué ruta va este?
00:15:32
A upload.
00:15:34
¿Vale? Cuando el...
00:15:36
este método va a ser la respuesta
00:15:40
a upload
00:15:44
vale, y este método
00:15:45
no me devuelve
00:15:47
todavía nada para descargar
00:15:50
con lo cual un stream, porque me va a devolver
00:15:51
una vista, si me devuelve una vista
00:15:54
stream, no me complico, me devuelve una vista
00:15:55
no, o sea, lo que habéis
00:15:58
copiado va a ir ahora adentro
00:16:00
ahora, este método es el método
00:16:01
que convierte
00:16:04
xml a json
00:16:05
vale
00:16:08
A ver
00:16:08
Este método
00:16:12
Recibe un file
00:16:14
Claro, ahora lo añadimos
00:16:17
Por ahora, copiad el código
00:16:19
Que hemos hecho
00:16:22
E importáis el post mapping
00:16:23
Vale
00:16:25
Entonces este método
00:16:26
Ya lo que hace
00:16:29
Que lo tenemos fácil es
00:16:31
Coger ese objeto file
00:16:33
Pero claro, lo que nos falta es
00:16:35
¿De dónde sale el file?
00:16:37
Coge el file
00:16:39
¿Vale?
00:16:40
Se crea
00:16:42
Un fichero local en esta ruta
00:16:43
Deberíamos sacarla a un final, pero ahí queda muy feo
00:16:46
Deberíamos sacarla a un final
00:16:48
¿Vale? Crea un archivo local
00:16:49
En esta ruta
00:16:52
Y
00:16:53
Sí
00:16:55
Y
00:16:58
Lo convierte
00:16:59
Y te lleva a una página de descarga
00:17:01
¿Vale? Entonces
00:17:07
antes de meternos con esto
00:17:08
file es el parámetro
00:17:09
del request que tiene el fichero, ¿verdad?
00:17:12
este index
00:17:15
bueno, no nos va a dar tiempo yo creo a completarlo
00:17:16
pero bueno, lo que lleguemos y ya está
00:17:18
este form de aquí
00:17:20
acordaos de que lleva un parámetro en su request
00:17:21
que es el parámetro file
00:17:24
lleva un parámetro, pues ese parámetro
00:17:25
tiene que llegar al controlador de alguna
00:17:28
manera, tiene que llegar aquí
00:17:30
este es que no tenía parámetro
00:17:32
aquí no le llegaba ningún parámetro
00:17:34
por eso eso estaba vacío
00:17:36
Pero a este sí que le llega un parámetro
00:17:38
Bueno, pues como indicamos que le llega un parámetro
00:17:41
Pues oye tú
00:17:44
Que te va a llegar un parámetro
00:17:45
Una anotación dentro de
00:17:47
Vale, que se llama
00:17:48
Esto no sé seguro
00:17:51
Si se pone value file
00:17:52
Ahora lo miramos
00:17:55
Y ese parámetro guárdalo en
00:17:56
Aquí
00:17:59
Vale
00:18:01
No, perdón, en un multipart
00:18:02
Este
00:18:04
este es el
00:18:04
no me acuerdo el nombre de la clase
00:18:09
bonito que lo tengo aquí, la que tiene un fichero
00:18:12
aquí la tenemos
00:18:15
eso, multipart
00:18:18
vale
00:18:20
vale, a ver
00:18:21
importamos
00:18:26
request para
00:18:35
y aquí esta llave me sobra
00:18:36
Y me falta aquí la llave
00:18:39
Que la tenía mal
00:18:44
Vale, está bien
00:18:45
Bueno, pues a ver
00:18:48
Este es
00:18:51
Voy a formatear
00:18:52
¿Por qué no ha formateado?
00:18:55
Vale, entonces
00:19:01
¿Por qué no me hace el format?
00:19:01
No, no está formateado
00:19:08
No, ya lo metí
00:19:10
Bueno, ya lo formatearé, da igual
00:19:14
vale, pues este método
00:19:17
es el método con el que el controlador
00:19:19
resuelve, devuelve
00:19:21
o sea, contesta a Bloat
00:19:23
vale, diferencia de este método
00:19:25
con el anterior, que este
00:19:27
recibe un parámetro en el request
00:19:29
recibe un parámetro
00:19:31
¿qué parámetro recibe? un fichero
00:19:32
pues yo primero le indico
00:19:35
oye tú, cuidado, método
00:19:37
que tú recibes un parámetro en tu request
00:19:38
que se llama file
00:19:41
guárdamelo
00:19:42
en esta variable
00:19:44
¿En qué variable guarda Spring un fichero con toda su información de cómo me llamo, etcétera?
00:19:46
En un objeto multipar, ¿vale?
00:19:54
Es decir, el parámetro file que va en el request no es un fichero sin más con datos.
00:19:57
Es el fichero con datos más su nombre, más su tipo, etcétera, ¿vale?
00:20:02
Pues entonces este parámetro no lo puede guardar en un file, no lo guarda en un file.
00:20:08
Lo guarda en un multipar file, ¿vale?
00:20:12
entonces el model para que vale
00:20:15
para crear las vistas, luego lo mencionamos
00:20:17
bueno pues este método, ahora ya si que aquí
00:20:19
metéis el copia y pega
00:20:21
este método es el que convierte a xml
00:20:22
to json, que hace
00:20:25
pues saca los bytes de entrada
00:20:26
crea el fichero local
00:20:29
para guardar
00:20:31
ese fichero localmente
00:20:33
escribe en ese
00:20:35
fichero local
00:20:45
estos bytes que he sacado
00:20:46
Esto se podría hacer con Java.io también, abriéndolo con un input string e ir pasando los bytes al input string. Pero la clase files, pues, te ofrece este método, pues, este. Vale.
00:20:48
El model lo importas de sprint, sí
00:21:01
Aquí importamos
00:21:09
Bueno, habría que importar file de java.io
00:21:11
Ahora, convertimos de XML a JSON nuestro fichero local
00:21:14
Que es este
00:21:20
Convertimos nuestro fichero local de XML a JSON
00:21:21
Y ahora devolvemos la vista
00:21:30
La vista es la página de descarga
00:21:34
la página de descarga
00:21:37
entonces ahora
00:21:39
¿qué nos falta por hacer?
00:21:43
¿qué nos falta por copiar?
00:21:45
vamos a copiar este método de utilidades
00:21:47
no hace falta que lo hagáis vosotros
00:21:49
sí, vamos a hacer la clase
00:21:50
y luego copiáis de la chuleta
00:21:53
entonces vamos a hacer
00:21:55
el paquete
00:21:57
donde queráis que esté
00:21:58
pues por ejemplo
00:22:01
aquí
00:22:03
sí, pero vamos a hacer
00:22:05
new package
00:22:07
com.dam2.app
00:22:11
web.utilidades
00:22:15
por ejemplo, utilidades
00:22:20
vale, en utilidades os hacéis la clase utilidades
00:22:24
y ahora, aquí ya en esta clase utilidades
00:22:30
vamos a hacernos este método
00:22:39
este metodito que transforma xml a json
00:22:40
copiar
00:22:44
para transformar
00:22:45
y ahora vamos a hacer aquí el método
00:22:51
¿qué nombre le hemos dado al método?
00:22:53
xml to json
00:22:56
vamos a hacer un método que se llame así
00:22:57
xml
00:22:59
public
00:23:02
static void
00:23:05
xml
00:23:07
to json
00:23:09
ahora
00:23:12
copiar
00:23:13
Y ahora me faltan los parámetros que es el fichero xml, el parámetro que le he pasado del controlador que está aquí, el file con el fichero xml, pues venga aquí, un file, file xml.
00:23:16
ya está nuestro método de utilidades
00:23:45
a falta de las dependencias
00:23:50
importamos file
00:23:51
y ahora
00:23:54
¿qué pasa con
00:23:57
fijaos el JSON node
00:24:00
me lo ofrece
00:24:02
directamente porque Spring
00:24:04
ya incorpora Jackson dentro
00:24:05
¿vale?
00:24:07
ya incorpora Jackson dentro
00:24:09
xml mapper
00:24:11
está en otra
00:24:13
dependencia, que la ponemos ahora
00:24:16
no pasa nada
00:24:18
el object mapper
00:24:18
¿cómo buscaría yo?
00:24:20
si no sé de qué librería es
00:24:22
me pasa un proyecto así, ¿cómo lo busco?
00:24:24
¿cómo buscaría yo?
00:24:27
hombre, a ver, es que si tú tienes un proyecto
00:24:28
que está usando objetos, ya va a tener sus propios import
00:24:30
claro
00:24:32
buscas en el infinito
00:24:33
pero bueno, es una situación normal
00:24:40
una situación más normal puede ser que tú tengas que hacer
00:24:42
algo y no sabes
00:24:44
en qué librería hay que te puede hacer
00:24:46
eso, pero ahí ya sí que es buscar
00:24:48
en, claro, entonces
00:24:50
perdón, que he puesto aquí void
00:24:53
y aquí te devuelve un file, lógicamente
00:24:56
vale, entonces
00:24:58
este método, ahora ya sí que
00:25:00
es un método que no es
00:25:02
solo para un xml que siga un esquema
00:25:04
concreto como el recetario
00:25:06
esta versión la ampliamos
00:25:08
este objeto xml
00:25:10
mapper es capaz
00:25:12
de leerte un
00:25:14
xml
00:25:16
y guardártelo en un json node
00:25:17
que ya sabemos lo que es un json node del otro día
00:25:20
un nodo json con todos
00:25:22
sus nodos hijos json
00:25:24
pues es capaz de guardar un nodo json
00:25:26
pues ya está, con el object mapper
00:25:28
escribo el nodo json al fichero
00:25:30
y ya lo tengo convertido
00:25:33
¿vale?
00:25:34
¿lo convierte en clases de...
00:25:36
claro, en un fichero json
00:25:38
entonces este, pues bueno, es lo mismo que hemos hecho en otro sitio
00:25:39
que es coger el nombre del fichero JSON
00:25:42
que es cambiándole la extensión
00:25:44
y ya está
00:25:46
¿vale? entonces
00:25:48
el XMLMapper este
00:25:50
estará
00:25:52
lo que pasa es que creía yo
00:25:57
que en Spring ya te lo iba
00:25:58
a ofrecer
00:25:59
pero
00:26:02
¿vale?
00:26:04
venga, lo repito
00:26:06
si estoy para o no me odien
00:26:07
lo único que he dicho es
00:26:08
que la dinámica de trabajo aquí con Sprint
00:26:10
para la aplicación web sería más fácil.
00:26:12
Yo identifico las cosas que tengo que hacer.
00:26:15
La llamada raíz,
00:26:17
la llamada upload,
00:26:19
la llamada download.
00:26:20
Por cada ruta, por cada URL,
00:26:22
un método del controlador.
00:26:24
Con el nombre que a mí me dé la gana.
00:26:26
Se acabó.
00:26:28
Los métodos del controlador,
00:26:29
si no reciben nada,
00:26:32
hay vacío.
00:26:34
Y string si devuelven vista.
00:26:36
Y si reciben algo,
00:26:39
requestParam con el nombre de lo que recibe
00:26:40
y aquí el parámetro
00:26:43
con el tipo de datos. Si fuera texto, string.
00:26:46
Hago lo que tenga que hacer
00:26:49
y devuelvo la vista.
00:26:50
¿Vale?
00:26:52
Venga, pues ahora sí que sí
00:26:54
- 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:
- 20
- Fecha:
- 6 de noviembre de 2025 - 20:05
- Visibilidad:
- Clave
- Centro:
- IES ROSA CHACEL
- Duración:
- 26′ 57″
- Relación de aspecto:
- 1.78:1
- Resolución:
- 1920x1080 píxeles
- Tamaño:
- 121.01 MBytes