Java API 接口出现乱码,通常不是“某一个原因”,而是请求/响应链路中字符编码不一致导致的。下面按最常见原因 → 排查方式 → 解决方案给你一个清晰总结。
表现:GET/POST 参数到 Controller 就是乱码
✅ 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");
表现:接口返回 JSON 中文乱码
Content-Type 没指定 charset✅ 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);
}
表现:数据库正常,Java 取到就是乱码
jdbc:mysql://localhost:3306/db?useUnicode=true&characterEncoding=UTF-8
数据库检查:
SHOW VARIABLES LIKE 'character_set%';
表现:读文件、读流乱码
new InputStreamReader(inputStream, StandardCharsets.UTF_8);
如 RestTemplate、OkHttp、HttpClient
restTemplate.getMessageConverters()
.add(0, new StringHttpMessageConverter(StandardCharsets.UTF_8));
| 位置 | 是否 UTF-8 |
|---|---|
| 前端请求头 | ✅ |
| Tomcat | ✅ |
| Spring 编码 | ✅ |
| 数据库 | ✅ |
| JSON 序列化 | ✅ |
| 文件 IO | ✅ |
乱码 = 编码不一致
请求、处理、响应、存储,每一环都必须 UTF-8
如果你愿意,可以把:
贴出来,我可以直接帮你精准定位是哪一步出的问题。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。