2014-01-10 38 views
2

我嘗試使用Joda-Time中的org.joda.time.DateTime字段保存文檔。Spring數據MongoDB在默認情況下未啓用Joda-Time轉換器

@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; } 
} 

使用AbstractMongoConfiguration從彈簧數據mongodb的標準應用程序配置:

@ComponentScan 
@EnableMongoRepositories 
public class AppConfig extends AbstractMongoConfiguration { ... } 

其中顯式使用的AppConfig類(斯波克,但是在內部,使用由彈簧測試提供的機制)的試驗:

@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數據中的Joda-Time轉換器當Joda-Time jar處於classp時,MongoDB(以及Spring Core本身)中的Joda-Time轉換器應該啓用default ATH。

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轉換器?

回答

4

花了我一些時間,我想與他人分享解決方案。

我創建了一個小型快速入門應用程序,但無法重現該問題。最後我發現問題是我的配置類中缺少@Configuration註釋。隨着:

@Configuration 
@ComponentScan 
@EnableMongoRepositories 
public class AppConfig extends AbstractMongoConfiguration { ... } 

它只是正常工作。

所以經常用於當在上下文中@ContextConfiguration明確登記(由類配置類或AnnotationConfigWebApplicationContext)一個register()方法省略@Configuration。這些類被反正處理和所有聲明的豆中發現,它是有時有用不使用@Configuration,以防止由組件掃描時,有在同一個封裝件2級類似的結構的類中通過不同的測試中使用的測試上下文檢測,它產生的另一個question如我不知道它是否是所希望的行爲。

+0

[提到的問題]有一個有趣的答案(http://stackoverflow.com/q/21034018/313516)。 –