gpt4 book ai didi

java - Spring Data MongoDB 没有看到默认启用的 Joda-Time 转换器

转载 作者:行者123 更新时间:2023-11-30 07:11:33 26 4
gpt4 key购买 nike

我尝试使用 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(以及 Spring Core 本身)中的 Joda-Time 转换器应由 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 { ... }

它运行良好。

当配置类在上下文中显式注册时(通过 @ContextConfigurationregister() AnnotationConfigWebApplicationContext) 中的方法。无论如何都处理了这些类,并且找到了所有声明的 bean。当不同测试使用的测试上下文中的相同包中有 2 个相似的配置类时,不使用 @Configuration 来防止组件扫描检测有时很有用。它生成了另一个 question因为我不确定这是否是所需的行为。

关于java - Spring Data MongoDB 没有看到默认启用的 Joda-Time 转换器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21034351/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com