Spring Boot中使用MessageSource的NoSuchMessageException

时间:2017-06-26 08:51:57

标签: java spring spring-mvc

我正在使用Spring Boot 1.5.4和Spring Data REST。我将messages.properties放在resources / i18n文件夹中。在这个文件夹中,我有两个文件:messages.properties和messages_it.properties 我以这种方式配置了我的WebMvcConfigurerAdapter:

    @Bean
    public MessageSource messageSource() {
        ReloadableResourceBundleMessageSource messageSource = new ReloadableResourceBundleMessageSource();
        messageSource.setBasenames("i18n/messages");
        messageSource.setDefaultEncoding("UTF-8");
        //messageSource.setUseCodeAsDefaultMessage(true);
        messageSource.setCacheSeconds((int) TimeUnit.HOURS.toSeconds(1));
        messageSource.setFallbackToSystemLocale(false);
        return messageSource;
    }

当我必须本地化消息时,我会这样做:

        String message = messageSource.getMessage(throwable.getClass().getName(), new Object[] {}, locale);

如果语言的属性文件存在,这可以正常工作,否则我会有例外情况:

Caused by: org.springframework.context.NoSuchMessageException: No message found under code 'org.springframework.dao.InvalidDataAccessApiUsageException' for locale 'fr_CH'.

我的猜测是由于某种原因MessageSource也没有读取messages.properties文件,如果它存在并且它具有与其他文件相同的密钥。

1 个答案:

答案 0 :(得分:1)

通常,如果未以错误的方式配置或配置MessageBundle,则会发生此异常。

更改

  

messageSource.setBasenames( “I18N /消息”);

  

messageSource.setBasenames( “/ I18N /消息”);   或messageSource.setBasenames(“classpath:/ i18n / messages”);

如果i18n是i18n文件的根目录。