2015-12-12 17 views
10

Spring-boot-starter-jdbc (v1.3.0) kullanarak yazıyorum.Yaylı önyükleyicileri, ilkbahar açılışında nasıl kaydeder?

Karşılaştığım sorun: BeanPropertyRowMapper örneği, java.sql.Timestamp'dan java.time.LocalDateTime'a dönüştürülemiyor.

Bu sorunu kopyalamak için, bu türler için org.springframework.core.convert.converter.Converter uyguladık.

public class TimeStampToLocalDateTimeConverter implements Converter<Timestamp, LocalDateTime> { 

    @Override 
    public LocalDateTime convert(Timestamp s) { 
     return s.toLocalDateTime(); 
    } 
} 

Sorum şu: Ben BeanPropertyRowMapper için TimeStampToLocalDateTimeConverter kullanılabilir hale nasıl.

Daha genel bir soru, bunları sistem genelinde kullanılabilir hale getirmek için dönüştürücülerimi nasıl kaydederim?

Aşağıdaki kod

başlatma sahnede NullPointerException bize getirmek:
private Set<Converter> getConverters() { 
    Set<Converter> converters = new HashSet<Converter>(); 
    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(); 
}  

teşekkür ederiz.

+1

Dönüştürücünüzü fasulye olarak ekleyin ... Diğer her şeyi kaldırın. –

+0

'HttpMessageConverter' ve' Converter' 'burada karıştırılıyor. Sadece WebMVcConfigurerAdapter'ı genişleten ve 'addFormatters' yöntemini uygulayan bir sınıf ekleyin. Eklemek istediğinizler için 'FormatterRegistry'' 'addConverter' '' çağrısında. –

+0

Web ortamım hiç yok. –

cevap

0

Uygulamanız boyunca tek bir ConversionService örneğini kullanmak için, yayının @Outowired ve ilgili bağımlılık enjeksiyon mekanizmasını kullanmanızı öneririm. ConversionService, yapılandırma içinde başlatılacak.

Tüm dönüştürücülerin uygulama alanı genişliğinde bir ek açıklama (örn. @OutoRegistered) alır. Uygulamada bir @Component FormatterRegistrar (Type name kendisi biraz yanıltıcıdır, evet 'dir "... kayıt olduğu için" Kayıt Şirketi "ve" Tamamen yay olarak yönetilen ve bağımlılık enjeksiyonu gerektirdiğinde @Component ") @OutoRegistered List tüm açıklamalı Dönüştürücüler.

concrete implementation details için bu konuya bakın. Bu mekanizmayı projemiz içinde kullanıyoruz ve bir çekicilik gibi çalışıyor.