2015-12-12 7 views
10

私はspring-boot-starter-jdbc(v1.3.0)を使ってアプリケーションを書いています。スプリングブートでカスタムコンバータを登録するには?

私が遭遇した問題:のインスタンスは、java.sql.Timestampからjava.time.LocalDateTimeに変換できないため、失敗します。

この問題をコピーするために、これらのタイプに org.springframework.core.convert.converter.Converterを実装しました。

public class TimeStampToLocalDateTimeConverter implements Converter<Timestamp, LocalDateTime> { 

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

私の質問は:私はBeanPropertyRowMapperためTimeStampToLocalDateTimeConverter利用できるようにするにはどうすればよいです。

一般的な質問より、コンバータをシステム全体で使用できるように登録するにはどうすればよいですか?

次のコードは、初期化段階でNullPointerExceptionに私たちをもたらす:

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(); 
}  

ありがとうございました。

+1

コンバータをBeanとして追加するだけです。他のものはすべて削除してください。 –

+0

ここでは 'HttpMessageConverter'と' Converter'を混同しています。 'WebMVcConfigurerAdapter'を拡張したクラスを追加し、' addFormatters'メソッドを実装するだけです。 'FormatterRegistry'では、追加したいもののための' addConverter'を呼び出します。 –

+0

私はウェブ環境をまったく持っていません。 –

答えて

0

@Autowiredと関連するSpringの依存性注入メカニズムを使用して、アプリケーション全体で単一のConversionServiceインスタンスを使用することをお勧めします。 ConversionServiceはコンフィグレーション内でインスタンス化されます。

すべてのコンバーターには、アノテーション(@AutoRegisteredなど)が適用されます。アプリケーションの起動時に@Component FormatterRegistrar(型名自体が誤解を招く場合があります)。登録者と同じように「... Registrar」です。@Componentは完全にスプリング管理されており、依存性注入が必要なため)@AutoRegistered Listすべての注釈付きコンバーターの

concrete implementation detailsのこのスレッドを見る私たちはこのプロジェクトの中でこのメカニズムを使い、それは魅力的なもののように機能します。

関連する問題