Saltar al contenido

Registre Spring Converter programáticamente en Spring Boot

La guía o código que verás en este artículo es la solución más sencilla y válida que hallamos a esta inquietud o dilema.

Solución:

La respuesta es que solo necesita anotar su convertidor como @Component:

Este es mi ejemplo de convertidor

import org.springframework.core.convert.converter.Converter;
@Component
public class DateUtilToDateSQLConverter implements Converter 

    @Override
    public Date convert(java.util.Date source) 
        return new Date(source.getTime());
    

Luego, cuando Spring necesita convertir, se llama al convertidor.

Mi versión de Spring Boot: 1.4.1

Aquí está mi solución:

Una anotación de TypeConverter:

@Target(ElementType.TYPE, ElementType.FIELD, ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Documented
@Component
public @interface TypeConverter 

Un registrador de convertidores:

@Configuration
public class ConverterConfiguration 

    @Autowired(required = false)
    @TypeConverter
    private Set> autoRegisteredConverters;

    @Autowired(required = false)
    @TypeConverter
    private Set> autoRegisteredConverterFactories;

    @Autowired
    private ConverterRegistry converterRegistry;

    @PostConstruct
    public void conversionService() 
        if (autoRegisteredConverters != null) 
            for (Converter converter : autoRegisteredConverters) 
                converterRegistry.addConverter(converter);
            
        
        if (autoRegisteredConverterFactories != null) 
            for (ConverterFactory converterFactory : autoRegisteredConverterFactories) 
                converterRegistry.addConverterFactory(converterFactory);
            
        
    


Y luego anote sus convertidores:

@SuppressWarnings("rawtypes")
@TypeConverter
public class StringToEnumConverterFactory implements ConverterFactory 

    @SuppressWarnings("unchecked")
    public  Converter getConverter(Class targetType) 
        return new StringToEnum(targetType);
    

    private final class StringToEnum implements Converter 

        private Class enumType;

        public StringToEnum(Class enumType) 
            this.enumType = enumType;
        

        @SuppressWarnings("unchecked")
        public T convert(String source) 
            return (T) Enum.valueOf(this.enumType, source.trim().toUpperCase());
        
    

**Si no está en Spring Boot, donde se realiza el registro automático de convertidores anotados con @Component (y anotaciones de estereotipos similares) y usted está no en el entorno Web Mvc :

@Bean
ConversionService conversionService()
    ConversionServiceFactoryBean factory = new ConversionServiceFactoryBean();
    Set> convSet = new HashSet>();
    convSet.add(new MyConverter()); // or reference bean convSet.add(myConverter());
    factory.setConverters(convSet);
    factory.afterPropertiesSet();
    return factory.getObject();

Si haces scroll puedes encontrar las explicaciones de otros creadores, tú de igual manera eres capaz mostrar el tuyo si lo deseas.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

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