¿Cómo creo un conversor de tipo de datos personalizado?
Los conversores de tipos de datos pueden implementar Converter (preferentemente) o GenericConverter si se necesita información de clase en tiempo de ejecución para gobernar la estrategia de conversión. Todos los beans de ambos tipos reciben el conversionService en tiempo de ejecución.
Ten en cuenta que, aunque Converter es una interfaz funcional, NO es posible definir una implementación bean como una lambda debido al borrado de tipos de las lambdas generadas; por lo tanto, deben ser clases anónimas.
Ten en cuenta que las estrategias de soporte de GenericConverter no son intrínsecamente bidireccionales, así que registra tanto un conversor String → Type COMO un conversor distinto Type → String, o registra un único conversor que soporte ambas direcciones (y luego deriva la dirección dentro del método convert comprobando el tipo del objeto fuente). Además, también es posible especificar un tipo (distinto de string) al acceder a una propiedad; en ese caso, se invocaría un conversor entre el tipo de la propiedad del otro objeto y el tipo deseado.
Nota sobre la sobrescritura de conversores existentes: La interfaz GenericConverter no está tipada; por lo tanto, el último bean cargado con el mismo nombre será el que se registre. Una buena práctica es asignar un namespace apropiado a cualquier conversor (p. ej., myBankConverter vs dateConverter) y reestructurar el orden de instanciación de la configuración según sea necesario si es necesario sobrescribir conversores del core.
La clase de configuración ConversionConfig.java contiene algunos ejemplos de conversores de tipo registrados que se aplican de forma predeterminada.
Para consejos de uso, consulta los siguientes casos de prueba unitarios:
-
ExpressionEngineTests para acceso a propiedades y uso general
-
SpelTests para ejemplos de bajo nivel de registro de funciones e invocación de métodos de bean h