无法将[... ReloadableResourceBundleMessageSource]转换为所需的类型[... ResourceBundleMessageSource]

时间:2019-01-16 16:44:41

标签: java spring

因此,我尝试将项目内部化。我做

  • 消息
  • Messages_zh_CN
  • Messages_fr

如果我将它们放到/ resources /中,则在我的上下文中与ResourceBundleMessageSource都可以正常工作。但是我想更改文件夹,例如更改为C:\ Apache \ servicemix \ etc \ conf \ messages。

当我这样做                                              

Servicemix编写

ResourceBundle [file:C:/Apache/servicemix/etc/conf/messages/Messages] not found for MessageSource: Can't find bundle for base name file:C:/Apache/servicemix/etc/confi/messages/Messages, locale en

在Servicemix的调试模式下,我尝试从属性中获取正确的消息,并且在执行类似

的操作时可以正常工作
    ReloadableResourceBundleMessageSource messageSource=new ReloadableResourceBundleMessageSource();
    messageSource.setBasename("file:C:/Apache/servicemix/etc/configurator/messages/Messages");
    messageSource.getMessage("next",null,new Locale("en"));

我明白了我的需要。我想在我的上下文中使用它。但                    导致错误:

Caused by: java.lang.IllegalStateException: Cannot convert value of type [org.springframework.context.support.ReloadableResourceBundleMessageSource] to required type [org.springframework.context.support.ResourceBundleMessageSource] for property 'messageSource': no matching editors or conversion strategy found
at org.springframework.beans.TypeConverterDelegate.convertIfNecessary(TypeConverterDelegate.java:267)
at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:449)
... 140 more

为什么不起作用? 我使用清晰的Spring,而不是SpringBoot

1 个答案:

答案 0 :(得分:0)

您收到的错误消息是由于您在代码库中的某个位置使用ResourceBundleMessageSource作为类型。可能在具有该类型字段的类中。

您应该使用公用接口ResourceBundleMessageSource,而不是使用具体类型的MessageSource。这样,选择使用哪种实现都无关紧要。