温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

java API接口为何乱码

发布时间:2026-10-02 11:33:05 来源:亿速云 阅读:124 作者:小樊 栏目:编程语言

Java API 接口出现乱码,通常不是“某一个原因”,而是请求/响应链路中字符编码不一致导致的。下面按最常见原因 → 排查方式 → 解决方案给你一个清晰总结。


一、最常见原因(90% 都在这里)

1️⃣ 前端 → 后端:请求参数乱码

表现:GET/POST 参数到 Controller 就是乱码

常见原因

  • 前端未指定 UTF-8
  • Tomcat 默认 ISO-8859-1(尤其 GET 请求)
  • Spring 未配置编码过滤器

解决方案

✅ Spring Boot 项目

spring:
  http:
    encoding:
      enabled: true
      charset: UTF-8
      force: true

✅ Tomcat(非 Spring Boot)

<Connector port="8080" URIEncoding="UTF-8" />

✅ GET 参数乱码(Tomcat)

new String(param.getBytes("ISO-8859-1"), "UTF-8");

2️⃣ 后端 → 前端:响应乱码

表现:接口返回 JSON 中文乱码

原因

  • Content-Type 没指定 charset
  • Jackson 默认编码不对

解决方案

✅ Controller 层

@RequestMapping(
  value = "/api",
  produces = "application/json;charset=UTF-8"
)

✅ Spring Boot 全局配置

spring:
  jackson:
    default-property-inclusion: always
  http:
    encoding:
      charset: UTF-8

✅ WebMvcConfigurer

@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
    StringHttpMessageConverter converter =
        new StringHttpMessageConverter(StandardCharsets.UTF_8);
    converters.add(0, converter);
}

3️⃣ 数据库 → Java:读取乱码

表现:数据库正常,Java 取到就是乱码

原因

  • 数据库连接未指定 UTF-8
  • 数据库字段编码不是 UTF-8

解决方案

jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8

数据库检查:

SHOW VARIABLES LIKE 'character_set%';

4️⃣ 文件 / IO 读取乱码

表现:读文件、读流乱码

new InputStreamReader(inputStream, StandardCharsets.UTF_8);

5️⃣ HTTP 工具调用接口乱码

如 RestTemplate、OkHttp、HttpClient

restTemplate.getMessageConverters()
    .add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));

二、快速自查清单 ✅

位置 是否 UTF-8
前端请求头 ✅
Tomcat ✅
Spring 编码 ✅
数据库 ✅
JSON 序列化 ✅
文件 IO ✅

三、一句话总结

乱码 = 编码不一致
请求、处理、响应、存储,每一环都必须 UTF-8


如果你愿意,可以把:

  • 用的什么框架(Spring Boot?普通 Spring?)
  • 是 GET 还是 POST
  • 前端怎么调用的
  • 乱码示例

贴出来,我可以直接帮你精准定位是哪一步出的问题。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI
助
手