springboot @ConfigurationProperties 中文乱码解决方案

278 篇文章 1 订阅
57 篇文章 0 订阅

================================

©Copyright 蕃薯耀 2021-12-22

​​​​​蕃薯耀的博客_CSDN博客

一、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

​​​​​蕃薯耀的博客_CSDN博客

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值