...
Puede deberse a un import incorrecto. En el caso que nos ha ocurrido, ha sido por importar la anotación Transient de java.beans, en vez de de javax.persistence (todo lo de persistencia debe importarse de esta librería). Como el error explica más bien poco, debemos repasar los imports a ver si esa es la causa.
Listar todos los endpoints levantados en nuestro Backend
En ocasiones es necesario obtener un listado de todos los endpoints disponibles en nuestra aplicación.
Aunque hay varias maneras de obtener esta información, como ya tenemos configurada la dependencia del Actuator en nuestras APIs, se explicará la forma de realizarlo con esta librería.
Solo hay que modificar el fichero application.properties (para local en nuestras fuentes, para los entornos en el repo de) y añadir las siguientes propiedades:
| Bloque de código |
|---|
management.endpoints.enabled-by-default=false
management.endpoint.health.enabled=true
management.endpoint.mappings.enabled=true
management.endpoints.web.exposure.include=health,mappings |
De esta forma se levanta el endpoint en el path /mappings y se podrán listar todos los endpoints levantados en la aplicación.
Query devuelve datos en local pero no en entorno
Se nos ha dado el caso de que una aplicación desplegada en local, utilizando el mismo datasource que en un entorno, no devolvía los mismos datos. En local se obtenían los datos correctamente, pero en test la respuesta del servicio rest era un objeto vacío. Para esto, primero debemos comprobar que la base de datos devuelve los datos correctamente en el backend. Si el problema es al responder al front, como en este caso, debemos revisar el application.properties.
En este caso faltaban propiedades en el entorno de test, en concreto las siguientes:
| Bloque de código |
|---|
spring.jackson.mapper.DEFAULT_VIEW_INCLUSION = true
spring.jpa.properties.hibernate.enable_lazy_load_no_trans=true
spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.Oracle10gDialect
spring.jpa.generate-ddl = false |
Esto no quiere decir que haya que copiar estas propiedades. Hay que comparar las propiedades que hay en el despliegue, en gitops, con las que tenemos en local, y en otros entornos si funciona correctamente, y añadir las que falten. En este caso, probablemente no se estuviese mapeando correctamente lo que se recibía de base de datos a la entidad java, pero no saltaba ninguna excepción por ello.
Se generan automáticamente las clases del metamodelo (clases con el nombre de entidad terminado en _)
Si tenemos este comportamiento y no es el que queremos, podemos hacer lo siguiente: en el icono del proyecto, Opción "Build path" > "Configure build path..." en la pestaña "source" he borrado dos entradas que tenía con subdirectorios "generated-sources".
(VS Code) Muchos errores en el pom
Si salen muchos errores en el pom, tipo que no puede encontrar los artefactos y cosas así, podemos probar lo siguiente:
- Comentamos la línea: <java.version>11</java.version>
- Guardamos el archivo
- En la esquina inferior derecha nos preguntará si queremos recargar las dependencias automáticamente cuando se modifique el pom. Le decimos que "sí", o que "siempre" (si ya le hemos dado a "siempre" previamente se recargará automáticamente).
- Una vez haya terminado de recargarse (mientras se recarga aparece en la barra inferior azul un simbolito dando vueltas, como que está "building"), descomentamos esa línea, y guardamos de nuevo.
- Una vez haya terminado de recargarse otra vez, puede que ya hayan desaparecido los errores y que podamos arrancar la aplicación.
Es un caso que nos ha ocurrido, no sabemos exactamente la razón por la que esto nos ha funcionado, así que tampoco podemos asegurar que funcione siempre, pero es una opción que podemos probar.
Propagar token Oauth automáticamente en clientes
Si nuestra API se autentica con tokens Oauth provinientes de MiCampus y, a su vez, hace uso de otros servicios en otras aplicaciones (por ejemplo, mis-certificados hace uso de certificados-api de otros grupos), es posible configurar los clientes REST para que propaguen automáticamente el token Oauth recibido en la petición original. Con esto se ahorra configurar manualmente el reenvío del token en cada llamada del cliente.
Puede verse el código para propagar el token en https://docs.spring.io/spring-security/reference/servlet/oauth2/resource-server/bearer-tokens.html.
En esta URL se encuentra el soporte tanto para clientes WebClient como RestTemplate.