zoukankan      html  css  js  c++  java
  • 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/

    今天越懒,明天要做的事越多。
  • 相关阅读:
    xml中DTD关键字说明
    xml学习笔记
    HTTP请求方法:GET和POST区别
    三种方法从键盘输入
    crontab定时器
    收藏一篇关于Asp.net Response.Filter的文章
    MethodImplOptions.Synchronized的一点讨论
    需要知道关于struct的一些事情
    Excel使用技巧总结
    HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
  • 原文地址:https://www.cnblogs.com/fanshuyao/p/15718594.html
Copyright © 2011-2022 走看看