springboot @ConfigurationProperties 中文亂碼解決方案


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/


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM