You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.24 16:22:41