消息来源无法找到密钥

时间:2017-03-21 12:00:27

标签: java spring spring-boot

我有一个项目,其中配置了以下消息源:

 @Bean
    public ReloadableResourceBundleMessageSource messageSource() {
        final ReloadableResourceBundleMessageSource source = new ReloadableResourceBundleMessageSource();
        source.setBasename("i18n/core/messages");
        source.setDefaultEncoding("UTF-8");
        source.setUseCodeAsDefaultMessage(true);
        return source;
    }

我想将这个“核心”项目用作我的应用项目的lib。消息在此核心中定义为资源。

在同一个核心项目中,我有一个 @ControlerAdvice ,它获取了我的应用程序抛出的所有异常,如下所示:

@ExceptionHandler
    public void unknownException(final Exception ex)  {

        if (ex instanceof StudioException){
            throw (StudioException) ex;
        }

        final UUID uuid = UUID.randomUUID();
        final String[] strings = {uuid.toString()};
        String message = messageSource.getMessage("exception.not.identified",strings, LocaleContextHolder.getLocale());
        final UnknownError unknownError = new UnknownError();
        unknownError.setUuid(uuid.toString());
        unknownError.setLogger(ExceptionUtils.getStackTrace(ex));
        unknownErrorService.save(unknownError);
        throw new StudioException(message);

问题在于,当我使用我的核心项目作为我的应用程序项目的依赖项,并且异常是thronw时,会调用 ExceptionHandler ,但 messageSource 无法找到键。

我尝试使用“classpath:...”设置基本名称,我将核心资源的目录strtucure更改为与app项目不同,但没有成功。

这是我的i18n属性: Properties files

有谁知道如何解决这个问题,在我的核心项目中使用密钥和消息逻辑?

1 个答案:

答案 0 :(得分:1)

surya评论:

  

尝试使用setBasename(" classpath:i18n / core / messages")

解决了这个问题。