Documentos de Académico
Documentos de Profesional
Documentos de Cultura
-Instalación de Spring
Vamos a IntelliJ IDE, buscamos el pluging Spring Boot Helper (es de pago, solo tendremos una
de prueba) y los instalamos. Reiniciamos, abrimos un nuevo proyecto y tendremos esta opción
añadida:
Una vez tenemos esto, ya podemos empezar con la creación de la API REST con Spring.
Cuando acabe, veremos una serie de carpetas y documentos. El documento pom.xml tiene
todas las dependencias necesarias ya cargadas automáticamente, que son:
También nos ha generado una estructura de directorios, las carpetas Java y resources dentro
de src->main:
Dentro de la carpeta java tenemos una clase ya creada, con sus anotaciones pertinentes, sus
importaciones, su inicialización:
Probamos a correr el programa a ver que ocurre. En el caso de que nos de error algún puerto,
abrimos el siguiente archivo, y escribimos “server.port= 9000”:
Una vez la tengamos corriendo, vamos al navegador, ponemos localhost:puerto-que-
tengamos-asignado y nos aparece esto. Es que estamos dentro de la aplicación:
Tengo que implementar algo que procese esto, y se hace mediante un controlador, y estos,
tiene que estar en algún sitio, y ese sitio hay que decírselo a la aplicación. Para ello, la
paramos, vamos a la carpeta java y crearemos un nuevo paquete, que llamaremos config, con
una nueva clase dentro que llamaremos JerseyConfig:
Dentro de JerseyConfig pondremos algunas anotaciones, las cuales le dicen tanto a Springboot
como a Jersey lo que vamos a hacer. Escribimos @AplicationPack (lo autocompleta), el import
se pone solo. Esto quiere decir que nuestra aplicación se ejecuta después del: puerto-que-
tengas-asignado:
También le diremos a Spring que esto, es un componente, para ello, ponemos @Component e
importamos clase si nos lo pide:
Procedemos a implementar lo que nos tiene que decir una vez entremos en la página raíz. En
HTTP, el verbo típico para obtener información en GET. Para implementar una función, usando
Spring Jersey, que me devuelvan algo, vamos a implementar los métodos, y en este caso,
implementamos el método GET, luego creamos la función:
En este trocito de código de aquí arriba, le estamos diciendo al controlador que, cuando se
meta en Path (página raíz, la barra) mediante el verbo GET, me pongo un Hola. Esto es lo que
vemos en el navegador al acceder ya que entramos en la raíz:
Cuando estamos programando una aplicación de back end, no vamos a hacerlo así, no
usaremos el navegador, si no que usaremos peticiones de HTTP directamente. Para ello,
usaremos la aplicación curl que viene en el propio Windows, y la ejecutamos a través de la
terminal. La abrimos y escribimos esto (petición), le damos a enter y nos sale en crudo el
resultado. No sale nada bonito, todo esto es back:
Este servicio no esta haciendo nada. Ahora nos complicaremos la vida. Vamos a crear un
“algo”, donde esté la info de los usuarios. El término correcto para esto, es modelo. Un modelo
es lo que da forma, o lo que contiene la información de los datos. Procedemos a crearlo.
Para ello, volvemos al código en IntelliJ, y creamos otra carpeta más dentro de la de
com.openbootcamp.demospringrest a la que llamaremos models:
Y dentro una clase que llamaremos Bootcamper. NOTA: En controllers, tenemos puesto
Bootcampers, en plural, asique a esta la llamaremos la versión en singular. Es una especie de
convención:
A esta parte, a implementar el modelo, se le conoce como POJO -> Plain Old Java Object. Como
aquí en Bootcamper somos personas, vamos a decir que tenemos un nombre, ponemos esto
dentro de la clase:
Con la anotación @Service encima de public class BootcamperService, le indicamos que esto es
un servicio. Nos pedirá que importemos la clase y se queda así:
Vamos a crear una lista de usuarios utilizando para ello un ArrayList. Va a tener una lista de
Bootcampers, y un método que será meterá un elemento en la lista. Importaremos las clases
necesarias para que no nos marque error:
El modelo models.Bootcamper ya lo tenemos creado en la carpeta modelo, y lo importamos
aquí para poder trabajar con él.
Dentro del servicio, creamos las funciones de getAll y add (obtener la lista y agregar usuario).
NOTA: Cuando creamos @Service ASEGURATE de que ponga Springboot o te va a dar error y
te dira que añadas beans que después tampoco van a rular.
Ya tenemos el servicio (si te fijas, hemos usado un get y un add, son las peticiones) , el modelo
(es donde está la “base de datos”, que tiene un constructor que tiene un método nombre que
tiene un get y un set dentro. Con get devuelve nombre con set mete un nombre y no devuelve
nada, pone void).
Variable inicializada
Aquí continuamos y creamos una función, que va a devolver la lista de usuarios, que está en
services:
Bien, nos vuelve a salir un error. El error 500 SERVER INTERNAL ERROR. La solución al final, fue
fijarse MUY BIEN en lo que estábamos escribiendo. Voy a poner las capturas de pantalla para
que sea vea lo que estaba pasando:
Ante que nada decir, que el problema aquí era el package, controllers, la clase
BootcampersControllers.java. Era poner BIEN lo que está marcado en amarillo. Fijarse en lo
anterior para ver las diferencias (básicamente poner BootcamperService en minúscula,
bootcamperService):
El motivo es, que en lugar de usar el nombre de la clase, había que poner el atributo de la
mismo, que es igual pero CON LA B MINUSCULA.
Continuamos. Vamos a crear una función que nos muestra una lista de los usuarios. Para ello
lo correcto es hacer esto:
Vamos a meter cosas en la lista para que cuando la muestre al acceder al localhost:puerto-
nuestro/bootcampers. Haremos una ñapa, para ello, vamos al constructor en Controllers, y
metemos las siguientes líneas:
Estamos, en este caso, invocando al servicio directamente para meterle a fuego un nuevo
elemento de tipo Bootcamper (new Bootcamper). Estas llamadas que hemos metido y que se
van a ejecutar en el constructor una sola vez, van a coger el Service y van a ir rellenando el
siguiente ArrayList de forma que tenga datos de prueba:
No nos sale tan bonito como en el vídeo, porque sale la versión Sample JSON. Ya trastearé con
esto para ponerlo bonito.
Sobre la marcha, le ponemos otro valor. Vamos ahora a nuestro package models, y en nuestro
modelo Bootcamper agregamos lo siguiente para meter un valor matemático doublé aleatorio:
Ffffff no aparece así. Lo vamos a poner de otra manera. Lo metemos como parámetro dentro
del constructor, y luego en Controllers le ponemos el valor, que será Math.random también:
Ahora, queremos crear un nuevo usuario. Para ello, en BootcampesControllers, pondremos un
método @POST, cuyo cometido será crear un nuevo usuario.
Cuando trabajamos con este tipo de implementaciones, tenemos que devolver un nuevo tipo
de dato, que se llama Response:
Con esto de aquí, estamos metiéndolo en la lista de nuestro servicio, en la lista de memoria. El
servicio podría atacar a una BBDD MYSQL o cualquier otra cosa. Ahora, estamos usando un
ArrayList para que sea mucho más rápido y para que sea en memoria. El tipo de dato devuelta
tiene que ser Response, que tenemos que informar al emisor (al navegador o a nuestra
herramienta curl) de que esto se ha creado:
Vamos a devolver una respuesta con Response, del tipo CREATED (significa que sea ha creado).
Dentro del return Response, como primer parámetro introducimos una URL, que será una URI,
que en nuestro caso será (“/bootcampers/” + bootcamper.getNombre():
Sale esto, que es algo así como que el medio(formato) no es soportado, mientras que en el
otro tenemos lo del JSON, aquí no pusimos nada, asique este es el error:
Vale, esto sigue pasando porque lo que le enviamos de “nombre= Yanira” no es JSON. Hay que
ponerlo en el formato de JSON para que funcione y para ello, hay que darle la forma correcta a
la petición, que es esta de aquí abajo:
Vale, a mi me sale un error y no los saca por el navegador cuando hago la petición del
listado(que es entrar en localhost y poner /bootcampers. No sale ni mi nombre ni el de
Ernesto)
Muy bien, como estamos trabajando en Windows y no hay nadie que me lo diga, después de
buscar por Internet encontré que, al estar creando todo desde Windows, el CMD lee el
formato JSON de una forma especial, y es quitando las comillas simples de las llaves y las
dobles de las de los parámetros ‘{“nombre”:”Ernesto”}’ Esto en rojo NO.
En su lugar, donde hay comillas simples hay que ponerlas dobles y donde hay comillas dobles
hay que poner tres comillas dobles. Tal que asi: