问题概述
在使用spring boot 做错误信息国际化时,按照既定步骤在项目idea
的resources
文件文件夹下创建cn.lw.sms
目录,并在这个新的目录下创建bundle文件;
然后在boot application.yml
配置messagesource自动装配:
国际化code 如下:
通过 messages.getMessage("error." + ex.getErrorCode(), ex.getLocalizedMessage())
通过code和传过来的locale来获取具体的信息。按照道理来说应该是可以获取到code代表的本地化信息。然而最终获取的是ex.getLocalizedMessage()
信息。就是说配置的messages bundle 并没有其作用.
调试
-
通过debug spring boot 有关messagesources的自动装配类
MessageSourceAutoConfiguration
,在调用getMatchOutcomeForBasename
函数时并没有在cn.lw.sms
目录下找到相关的资源; -
猜测,该目录没有打包到classes 中去?idea resources 指向错误?
- 查看
build/resources
目录发现已经存在了打包的文件cn.lw.sms.messages.properties
,第一个问题排除; - 在idea 中将所有模块全部移除,重新指定source,resources, test,test resources 目录重新编译build,问题还是一样没解决;
- 查看
-
在resources资源目录创建test目录,在test目录创建messages bundle 文件目录:
重新启动项目,debugMessageSourceAutoConfiguration
类的getMatchOutcomeForBasename
函数发现test/qq.properties
可以找到了!
猜想: 应该是和cn.lw.sms
目录有关系,.
换成/
试试! -
创建 目录
cn/lw/sms
,居然和cn.lw.sms
可以同时存在,看来离问题解决不远了:
删除cn.lw.sms
创建的目录,重新启动项目,资源可以找到了,问题解决.