Comment enregistrer des convertisseurs personnalisés dans le démarrage du spring?

J’écris une application en utilisant spring-boot-starter-jdbc (v1.3.0).

Le problème rencontré: l’instance de BeanPropertyRowMapper échoue car il ne peut pas convertir java.sql.Timestamp en java.time.LocalDateTime .

Afin de copier ce problème, j’ai implémenté org.springframework.core.convert.converter.Converter pour ces types.

 public class TimeStampToLocalDateTimeConverter implements Converter { @Override public LocalDateTime convert(Timestamp s) { return s.toLocalDateTime(); } } 

Ma question est la suivante: comment puis-je rendre disponible TimeStampToLocalDateTimeConverter for BeanPropertyRowMapper .

Question plus générale, comment puis-je enregistrer mes convertisseurs afin de les rendre disponibles dans tout le système?

Le code suivant nous amène à NullPointerException à l’étape d’initialisation:

 private Set getConverters() { Set converters = new HashSet(); converters.add(new TimeStampToLocalDateTimeConverter()); converters.add(new LocalDateTimeToTimestampConverter()); return converters; } @Bean(name="conversionService") public ConversionService getConversionService() { ConversionServiceFactoryBean bean = new ConversionServiceFactoryBean(); bean.setConverters(getConverters()); bean.afterPropertiesSet(); return bean.getObject(); } 

Je vous remercie.

Je suggère d’utiliser @Autowired et le mécanisme d’dependency injection associé de spring pour utiliser une seule instance ConversionService dans l’ensemble de votre application. Le service de conversion sera instancié dans la configuration.

Tous les convertisseurs devant être disponibles à l’échelle de l’application reçoivent une annotation (par exemple, @AutoRegistered). Sur l’application, démarrez un @Component FormatterRegistrar (le nom du type lui-même est un peu trompeur, oui, il s’agit de “… Registrar” comme c’est le cas pour l’enregistrement. Et @Component est entièrement géré par un ressort et nécessite une dependency injection) recevra @AutoRegistered List de tous les convertisseurs annotés.

Voir ce fil pour des détails concrets sur la mise en œuvre . Nous utilisons ce mécanisme dans notre projet et cela fonctionne comme un charme.