我有一个项目,其中配置了以下消息源:
@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项目不同,但没有成功。
有谁知道如何解决这个问题,在我的核心项目中使用密钥和消息逻辑?