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

Spring Boot接收请求的阿拉伯字符打印显示问号乱码如何解决

Spring Boot请求JSON阿拉伯字符显示为问号解决方案

问题本质为全链路字符编码不统一导致,普通Java运行时默认采用UTF-8编码,而Spring Boot的请求解析、容器配置、日志输出、JVM参数等环节可能存在非UTF-8编码配置,按以下步骤逐一排查即可解决:

  • 配置Spring Boot全局强制UTF-8编码
    在application.properties中添加如下配置:
    # 请求响应编码配置
    server.servlet.encoding.charset=UTF-8
    server.servlet.encoding.enabled=true
    server.servlet.encoding.force=true
    spring.http.encoding.charset=UTF-8
    spring.http.encoding.enabled=true
    spring.http.encoding.force=true
    
  • 配置JSON序列化框架编码
    手动指定Jackson的ObjectMapper采用UTF-8编码,避免JSON解析环节乱码:
    @Configuration
    public class JacksonConfig {
        @Bean
        public ObjectMapper objectMapper() {
            ObjectMapper mapper = new ObjectMapper();
            mapper.setCharset(StandardCharsets.UTF_8);
            return mapper;
        }
    }
    
  • 调整外置容器编码(若使用外置Tomcat部署)
    修改Tomcat安装目录下conf/server.xml文件,在Connector节点添加URIEncoding属性:
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443"
               URIEncoding="UTF-8"/>
    
    内置Tomcat部署无需调整,全局编码配置已覆盖该参数。
  • 添加JVM启动编码参数
    应用启动时添加如下JVM参数,强制指定默认编码为UTF-8:
    -Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8
    
  • 调整日志框架编码配置
    检查日志框架(logback/log4j2)的输出编码配置,以logback为例,在appender的encoder节点指定charset:
    <encoder>
        <charset>UTF-8</charset>
        <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
    </encoder>
    

配置完成后可先打印原始请求报文验证,排除前端传参时编码错误的问题。

内容的提问来源于stack exchange,提问作者Shubham Jain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 16:36:05