SpringBoot 2.2:无需-Dfile.encoding=UTF-8实现UTF-8编码效果
SpringBoot 2.2 打包后无需-Dfile.encoding=UTF-8实现全局UTF-8编码的解决方案
首先你贴的YAML配置存在语法错误——server后面少了冒号,这会导致配置完全不生效,先补上正确的配置:
server: servlet: encoding: charset: UTF-8 force: true force-response: true # 强制响应也采用UTF-8编码 tomcat: uri-encoding: UTF-8 spring: http: encoding: charset: UTF-8 force: true enabled: true
但仅靠上述配置只能覆盖HTTP请求响应的编码,系统层面的编码(比如日志输出、文件读写)仍会受系统默认编码影响,以下是完整解决步骤:
1. 在启动类中强制设置系统编码
在SpringBoot启动类的main方法开头添加代码,直接覆盖系统默认编码属性:
public static void main(String[] args) { // 强制设置系统文件编码和文件名编码 System.setProperty("file.encoding", "UTF-8"); System.setProperty("sun.jnu.encoding", "UTF-8"); SpringApplication.run(YourApplication.class, args); }
2. 配置Maven打包时的编码规范
Maven打包过程中编码不统一会导致资源文件(如application.yml、静态资源)乱码,在pom.xml中添加以下配置:
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <!-- 对应你的JDK版本,比如JDK8就写8 --> <maven.compiler.source>8</maven.compiler.source> <maven.compiler.target>8</maven.compiler.target> </properties> <build> <plugins> <!-- 确保资源文件以UTF-8编码处理 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.2.0</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- SpringBoot打包插件指定编码 --> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <version>2.2.13.RELEASE</version> <!-- 匹配你的SpringBoot版本 --> <configuration> <jvmArguments>-Dfile.encoding=UTF-8</jvmArguments> </configuration> </plugin> </plugins> </build>
3. 验证编码是否生效
可以写一个简单接口检查当前编码状态:
@RestController public class EncodingCheckController { @GetMapping("/check-encoding") public Map<String, String> checkEncoding(HttpServletRequest request, HttpServletResponse response) { Map<String, String> result = new HashMap<>(); result.put("file.encoding", System.getProperty("file.encoding")); result.put("sun.jnu.encoding", System.getProperty("sun.jnu.encoding")); result.put("request.characterEncoding", request.getCharacterEncoding()); result.put("response.characterEncoding", response.getCharacterEncoding()); return result; } }
启动打包后的应用,访问该接口,返回的编码值均应为UTF-8。
内容的提问来源于stack exchange,提问作者sljs msnd
相关产品推荐
相关产品推荐

