Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

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 HelmChart) 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.