我尝试仅保存来自 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
}
}
Spring Data MongoDB 中的 Joda-Time 转换器(以及 Spring Core 本身)应该由 default 启用当 Joda-Time jar 位于类路径上时。不幸的是我的测试失败了:
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
转换器?
最佳答案
我花了一些时间,我想与其他人分享解决方案。
我创建了一个小型快速启动应用程序,但无法重现该问题。最后我发现问题是我的配置类中缺少 @Configuration
注释。与:
@Configuration
@ComponentScan
@EnableMongoRepositories
public class AppConfig extends AbstractMongoConfiguration { ... }
它工作得很好。
当配置类在上下文中显式注册时(通过 @Configuration
中的类或 @ContextConfiguration
中的 register()
方法),我经常省略配置类的 AnnotationConfigWebApplicationContext)
。无论如何,这些类都会被处理,并且会找到所有声明的 bean。有时不这样做很有用当不同测试使用的测试上下文中的同一包中有 2 个相似的配置类时,使用 @Configuration
来防止组件扫描进行检测。它生成了另一个 question,因为我不确定这是否是所需的行为。
关于java - Spring Data MongoDB 默认情况下未启用 Joda-Time 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034351/