我尝试使用Joda-Time的org.joda.time.DateTime字段保存文档。
@Document
public class JodaDoc {
@Id
private BigInteger id;
private String dateAsString;
private DateTime date;
public JodaDoc(String dateAsString, DateTime date) {
this.dateAsString = dateAsString;
this.date = date;
}
public BigInteger getId() { return id; }
public String getDateAsString() { return dateAsString; }
public DateTime getDate() { return date; }
}
标准应用程序配置使用spring-data-mongodb中的AbstractMongoConfiguration:
@ComponentScan
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration { ... }
显式使用AppConfig类的测试(使用Spock,但使用spring-test提供的内部机制):
@ContextConfiguration(classes = AppConfig)
class JodaDocRepositorySpec extends Specification {
@Autowired
private JodaDocRepository jodaDocRepository
def "save document with DateTime"() {
given:
def jodaDoc = new JodaDoc(DateTime.now())
when:
def savedJodaDoc = jodaDocRepository.save(jodaDoc)
then:
savedJodaDoc.id
}
}
当Joda-Time jar在类路径上时,应该由default启用Spring Data MongoDB(以及Spring Core本身)中的Joda-Time转换器。不幸的是,我的测试失败了:
org.springframework.core.convert.ConverterNotFoundException:
No converter found capable of converting from type org.joda.time.DateTime to type java.util.Date
我尝试添加DefaultFormattingConversionService:
@Bean
public ConversionService conversionService() {
return new DefaultFormattingConversionService();
}
ConversionServiceFactoryBean和其他一些无效的东西。我无法在StackOverflow上找到答案。
问题即可。为什么Spring Data MongoDB没有看到标准的org.joda.time.DateTime -> java.util.Date
转换器?
答案 0 :(得分:4)
花了我一些时间,我想与其他人分享解决方案。
我创建了一个小型快速入门应用程序,但无法重现该问题。最后我发现问题是我的配置类中缺少@Configuration
注释。用:
@Configuration
@ComponentScan
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration { ... }
它运作正常。
当配置类在上下文中显式注册时(@Configuration
中的类或@ContextConfiguration
中的register()
方法,我经常忽略AnnotationConfigWebApplicationContext)
。无论如何都处理了所有已声明的bean。当不同测试使用的测试上下文中的相同包中有2个类似的配置类时,不使用@Configuration
来防止组件扫描检测有时很有用。生成了另一个question因为我不确定它是否是一个理想的行为。