Spring-boot-starter-jdbc(v1.3.0)を使用してアプリケーションを作成しています。
私が遭遇した問題:BeanPropertyRowMapper
のインスタンスは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();
}
}
私の質問は、どうすればTimeStampToLocalDateTimeConverter
をBeanPropertyRowMapper
で利用できるようにするのですか。
より一般的な質問ですが、コンバーターをシステム全体で利用できるようにするには、コンバーターを登録するにはどうすればよいですか?
次のコードは、初期化段階で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();
}
ありがとうございました。
すべてのカスタム変換サービスは、FormatterRegistryに登録する必要があります。 WebMvcConfigurerを実装して、新しい構成を作成し、変換サービスを登録してみてください
@Configuration
public class WebConfig implements WebMvcConfigurer {
@Override
public void addallFormatters(FormatterRegistry registry) {
registry.addConverter(new TimeStampToLocalDateTimeConverter());
}
}
これがうまくいくことを願っています。
_org.springframework.web.servlet.config.annotation.WebMvcConfigurer
_またはその実装のいずれかは、SpringBootプロジェクトでのあらゆる種類のカスタマイズの1つの停止場所です。コンバーターの要件に応じて、さまざまな方法が不要になります。
_org.springframework.core.convert.converter.Converter<S, T>
_を拡張して、新しいコンバーターを作成するだけです。次に、クラスオーバーライドメソッドorg.springframework.web.servlet.config.annotation.WebMvcConfigurer.addFormatters(FormatterRegistry)
を使用してSpringに登録します。
基本的にConditionalConverterから始まる他のタイプのコンバーターもあることに注意してください。
アプリケーション全体で単一のConversionServiceインスタンスを使用するには、@ Autowiredおよび関連するSpringの依存性注入メカニズムを使用することをお勧めします。 ConversionServiceは構成内でインスタンス化されます。
アプリケーション全体で利用できるすべてのコンバーターは、アノテーション(@AutoRegisteredなど)を受け取ります。アプリケーションの起動時に、@ Component FormatterRegistrar(タイプ名自体は少し誤解を招く可能性があります。登録を行うので「... Registrar」です。完全にSpring管理されており、依存性注入が必要なため、@ Component)は@AutoRegisteredListを受け取ります。すべての注釈付きコンバーターの。
具体的な実装の詳細 については、このスレッドを参照してください。私たちはプロジェクト内でこのメカニズムを使用しており、魅力的に機能します。