Uso de Converter en Quarkus

Conversión de tipos en Quarkus

Conversión de tipos en Quarkus


Volvemos a retomar artículos sobre Quarkus para ver como podemos realizar un conversor haciendo uso de converter en Quarkus. Si quieres echar un vistazo a un artículo parecido pero en Spring lo puedes hacer aquí (conversión de tipos en Spring).

¿Cómo funciona la Conversión en Quarkus?

La conversión en Quarkus depende de la Clase org.eclipse.microprofile.config.spi.Converter, la cual nos permite realizar una implementación para realizar conversiones de tipos.

Crear converter con Quarkus

Para realizar la conversión de tipos en Quarkus es necesario realizar dos pasos:

  • Creación de la clase implementando la clase org.eclipse.microprofile.config.spi.Converter.
  • Registrar la clase creada en META-INF/services.
  • Aplicar la prioridad, sino se establece, se considera un valor de 100.
  • Se puede hacer uso de @ConfigProperty para leer la propiedad.




Conversores proporcionados por Quarkus

Quarkus nos da una serie de conversores por defecto que nos va a facilitar nuestros desarrollos:

  • boolean
  • byte
  • short
  • int
  • long
  • float
  • double
  • char
  • class

Creación Converter custom en Quarkus

Para crear nuestro converter Custom vamos a comenzar haciendo uso de la clase Converter que se encuentra dentro del paquete org.eclipse.microprofile.config.spi.Converter.

Implementar Converter para devolver el tipo deseado

Vamos a partir de una Clase Car:

@Getter
@Setter
@AllArgsConstructor
public class Car{

    private long id;
    private double price;
    private String brand;
    private String color;

}

Creamos el conversor al que le pasaremos un String en el que cada campo esta separado por «,».

public class CarConverter implements Converter<Car> {

    @Override
    public Car convert(String value) {
        String[] carInfo = car.split(";");
        return new Car(
          Long.parseLong(carInfo [0]), 
          Double.parseDouble(carInfo [1]),
          carInfo[2],
          carInfo[3]);
    }
   }

}

Registrar el converter en el META-INF

Una vez hemos creado nuestra clase encargada de realizar la conversión, es necesario regístrarla añadiéndola dentro del fichero META-INF/services/org.eclipse.microprofile.config.spi.Converter:

com.refactorizando.converter.example.CarConverter

Aplicar la prioridad a nuestro converter

Vamos a aplicar una prioridad de 300 por lo que nuestra clase quedaría de la siguiente manera:

@Priority(300)
public class CarConverter implements Converter<Car> {

    @Override
    public Car convert(String value) {
        String[] carInfo = car.split(";");
        return new Car(
          Long.parseLong(carInfo [0]), 
          Double.parseDouble(carInfo [1]),
          carInfo[2],
          carInfo[3]);
    }
   }

}

La prioridad activa los interceptores y afectan en el orden en que se ejecutaran. Un número pequeño en la prioridad son llamados antes.

Cargar el valor con @ConfigProperty

El siguiente paso que debemos hacer para poder leer nuestra propiedad y aplicar nuestro conversor es hacer uso de @ConfigProperty para leerla, por lo que quedaría de la siguiente manera:

public class CarService{

    @ConfigProperty(name = "car")
    Car carFields;



}

Al añadir la anotación @ConfigProperty conseguiremos crear nuestro Objeto car partiendo de nuestra configuración.

Con este último paso tendríamos nuestro converter acabado.

Conclusión

En este artículo sobre uso de Converter en Quarkus hemos visto como podemos realizar apoyándonos en la clase Converter, para a partir de un dato de entrada obtener un dato de salida.

Esta función nos va a permitir modificar datos de entrada para obtener un tipo propio de salida, esto nos va a ayudar cuando necesitemos convertir un dato por una llamada a otro microservicio o por datos de entrada desde el exterior.

Si necesitas más información puedes escribirnos un comentario o un correo electrónico a refactorizando.web@gmail.com o también nos puedes contactar por nuestras redes sociales Facebook o twitter y te ayudaremos encantados!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *