2026/4/6 7:50:51
网站建设
项目流程
合川集团网站建设,微网站不能分享朋友圈,网站如何三合一,网站开发语言检测目录
一、问题描述
二、解决方案
2.1、网络上的解决办法
2.1.1、修改IDEA编码?
2.1.2、改为yml配置
2.1.3、读取时设置编码
2.2、重写资源加载类#xff08;个人推荐#xff09; 一、问题描述
由于业务需求需要在application.properties中配置一个带有中文字符串的参…目录一、问题描述二、解决方案2.1、网络上的解决办法2.1.1、修改IDEA编码?2.1.2、改为yml配置2.1.3、读取时设置编码2.2、重写资源加载类个人推荐一、问题描述由于业务需求需要在application.properties中配置一个带有中文字符串的参数注入到业务类中但是发现注入的中文是乱码的。大概情况如下所示package com.cnstar.test; import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.test.context.junit4.SpringRunner; /** * cnstar单元测试 * author cnstar **/ SpringBootTest(classes TestApplication.class) RunWith(SpringRunner.class) public class CnstarTest { Value(${name}) private String name; Test public void test1() { System.out.println(中文内容: name); } }打印输出结果二、解决方案2.1、网络上的解决办法遇到问题首先想到网络上找解决方案网络上的解决办法基本一致概括为以下三种。2.1.1、修改IDEA编码在IDEA中将所有的编码设置为UTF-8同时勾上Transparent native-to-ascii conversion的选项然后重新创建application.properties的文件。运行结果但是这个配置文件用记事本打开编辑时发现内容被修改成了unicode编码在线上修改时变得很困难所以此方式我不做推荐。2.1.2、改为yml配置就是将application.properties的文件修改为application.yml的结构重启项目。运行效果证明是可行的。这种方式可以根据自己需求选择但是当配置文件的内容层级较深时也不推荐容易看错行配置。2.1.3、读取时设置编码package com.cnstar.test.property; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import javax.annotation.PostConstruct; Configuration PropertySource(value classpath:application.properties, encoding utf-8) public class CnstarProperty { Value(${name}) private String name; PostConstruct public void init() { System.out.println(name is : name); } }亲测发现这种方式针对application.properties是不行的。但是针对其他名称的properties文件是可以的package com.cnstar.test.property; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.PropertySource; import javax.annotation.PostConstruct; Configuration PropertySource(value classpath:test.properties, encoding utf-8) public class CnstarProperty { Value(${name2}) private String name; PostConstruct public void init() { System.out.println(name is : name); } }运行结果2.2、重写资源加载类个人推荐1、创建一个类继承PropertiesPropertySourceLoader因SpringBoot版本不同PropertiesPropertySourceLoader****类会有差别本文采用的SpringBoot版本是2.3.12.RELEASE。package com.cnstar.utils; import org.springframework.core.io.*; import org.springframework.core.env.*; import org.springframework.boot.env.*; import java.util.*; import java.io.*; /** * 解快springBoot读取properties配置文件中文乱码的问题 * author cnstar **/ public class SelfPropertySourceLoader extends PropertiesPropertySourceLoader { Override public ListPropertySource? load(String name, Resource resource) throws IOException { MapString, ? properties this.loadUseUtf8(resource); if (properties.isEmpty()) { return Collections.emptyList(); } return Collections.singletonList(new OriginTrackedMapPropertySource(name, Collections.unmodifiableMap((Map?, ?)properties), true)); } private MapString, ? loadUseUtf8(Resource resource) throws IOException { Properties props new Properties(); InputStream is resource.getInputStream(); try { String filename resource.getFilename(); if (filename ! null filename.endsWith(.xml)) { props.loadFromXML(is); } else { props.load(new InputStreamReader(is, utf-8)); } } finally { is.close(); } return (Map)props; } }2.在resource目录下创建目录META-INF在META-INF目录下创建文件spring.factories内容如下org.springframework.boot.env.PropertySourceLoadercom.cnstar.utils.SelfPropertySourceLoader重新运行