解决SpringBoot中application.properties中存在中文配置使用@Value注解读取配置中文乱码

最近在做一个项目需要根据区域名称过滤掉一些区域,想到采用配置方法来解决,因此在,application.properties文件中添加,如下配置:

# 需要过滤的区域名称字段
filter.region.name=检测机构,检测站,检车站,检车,服务机构,查验机构,安检,服务站,查验区,车管所,报废库,监测,检测
# 需要过滤的点位名称字段
filter.camera.name=查验,检验

使用@Value注解导入配置

    @Value("${filter.region.name}")
    private String filterRegionName;
    @Value("${filter.camera.name}")
    private String filterCameraName;

调用获取区域信息时发现,根本没有按照区域名称过滤掉配置文件中的相关区域。

原因分析

Spring读取application.properties中间默认编码是ISO-8859-1,如果需要中文显示,需要设置spring读取配置设置编码为UTF-8,于是在application.properties中添加如下配置:

banner.charset=UTF-8
server.tomcat.uri-encoding=UTF-8
spring.http.encoding.charset=UTF-8
spring.http.encoding.enabled=true
spring.http.encoding.force=true
spring.messages.encoding=UTF-8

添加完成后,依然无效。

解决方法

大部分解决该问题方法无非两种:

  • 添加额外配置test.properties
  • 修改application.properties文件为application.yml,yml读取配置文件编码是UTF-8

我发现了一种简单的方法,可以避免添加或者修改配置文件后缀方法,修改application.properties中中文编码换成ASCII码,如下修改:

# 需要过滤的区域名称字段
#filter.region.name=检测机构,检测站,检车站,检车,服务机构,查验机构,安检,服务站,查验区,车管所,报废库,监测,检测
filter.region.name=\u68c0\u6d4b\u673a\u6784,\u68c0\u6d4b\u7ad9,\u68c0\u8f66\u7ad9,\u68c0\u8f66,\u670d\u52a1\u673a\u6784,\u67e5\u9a8c\u673a\u6784,\u5b89\u68c0,\u670d\u52a1\u7ad9,\u67e5\u9a8c\u533a,\u8f66\u7ba1\u6240,\u62a5\u5e9f\u5e93,\u76d1\u6d4b,\u68c0\u6d4b
# 需要过滤的点位名称字段
#filter.camera.name=查验,检验
filter.camera.name=\u67e5\u9a8c,\u68c0\u9a8c

问题得以解决。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐