springboot @ConfigurationProperties 中文亂碼解決方案
================================
©Copyright 蕃薯耀 2021-12-22
https://www.cnblogs.com/fanshuyao/
一、springboot @ConfigurationProperties 中文亂碼問題
版本:
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.7</version> <relativePath/> </parent>
1、application.properties文件:
lqy.java.auto.id=10 lqy.java.auto.name=張三aa lqy.java.auto.map.a=a-一 lqy.java.auto.map.b=b-二
2、讀取配置文件類
import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; @ConfigurationProperties(prefix = "lqy.java.auto", ignoreUnknownFields = true) public class MyProperties { private Integer id; private String name; private Map<String, String> map; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } }
3、加載出來,出現中文亂碼
myProperties = { "name":"å¼\u00a0ä¸\u0089aa", "id":10, "map":{"a":"a-ä¸\u0080","b":"b-äº\u008c"} }
二、springboot @ConfigurationProperties 中文亂碼解決方案
方案一:轉成ASCII碼
將中文全部轉成ASCII碼
詳情略。
方案二:覆蓋OriginTrackedPropertiesLoader
覆蓋原文件:org.springframework.boot.env.OriginTrackedPropertiesLoader
將OriginTrackedPropertiesLoader所有代碼復制出來,按照包路徑建立自己的包和類(包名和類名都必須和原來的一致,不然不生效)
如下圖所示:

然后修改自己的OriginTrackedPropertiesLoader上的編碼:
原來是:
修改后是:StandardCharsets.UTF_8
CharacterReader(Resource resource) throws IOException { this.reader = new LineNumberReader( new InputStreamReader(resource.getInputStream(), StandardCharsets.UTF_8)); }
重啟項目,發現項目中文亂碼已經解決。
myProperties = {"name":"張三aa","id":10,"map":{"a":"a-一","b":"b-二"}}
User u = {"name":"張三aa","id":10}
方案三:使用yml文件
使用yml文件也沒有中文亂碼。
application.yml:
lqy:
java:
auto:
id: 11
name: 李四ll
map:
aa: map一
bb: map二
同時使用application.yml和application.properties,application.properties會覆蓋application.yml
方案四:自定義配置文件
1、自定義配置文件:custom.properties
lqy.java.my.id=20 lqy.java.my.name=王王aa lqy.java.my.map.a=哈哈a lqy.java.my.map.b=哈哈b
2、配置類
必須設置編碼:encoding = "UTF-8"
import java.util.Map; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; @Configuration @ConfigurationProperties(prefix = "lqy.java.my", ignoreUnknownFields = true) @PropertySource(encoding = "UTF-8", value = "classpath:custom.properties", ignoreResourceNotFound = true) public class Custom { private Integer id; private String name; private Map<String, String> map; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Map<String, String> getMap() { return map; } public void setMap(Map<String, String> map) { this.map = map; } @Override public String toString() { return "Custom [id=" + id + ", name=" + name + ", map=" + map + "]"; } }
輸出沒亂碼:
custom = Custom [id=20, name=王王aa, map={b=哈哈b, a=哈哈a}]

(時間寶貴,分享不易,捐贈回饋,^_^)
================================
©Copyright 蕃薯耀 2021-12-22
https://www.cnblogs.com/fanshuyao/
