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

Spring Boot中Rest Controller无法接收POST请求体UTF-8特殊字符求助

解决Spring Boot Rest Controller无法接收UTF-8特殊字符的方案

核心解决办法

1. 配置Jackson强制UTF-8编码

Spring Boot 2.1.x中MediaType.APPLICATION_JSON_UTF8_VALUE已过时,需直接指定Jackson的编码规则。在application.properties中添加:

spring.jackson.encoding=UTF-8
spring.jackson.parser.allow-unquoted-control-chars=true

2. 自定义消息转换器确保编码生效

创建WebMvc配置类,强制Jackson消息转换器使用UTF-8处理请求和响应:

import org.springframework.context.annotation.Configuration;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import java.nio.charset.StandardCharsets;
import java.util.List;

@Configuration
public class WebMvcEncodingConfig implements WebMvcConfigurer {
    @Override
    public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
        converters.forEach(converter -> {
            if (converter instanceof MappingJackson2HttpMessageConverter) {
                ((MappingJackson2HttpMessageConverter) converter).setDefaultCharset(StandardCharsets.UTF_8);
            }
        });
    }
}

3. 更新控制器的MediaType配置

替换过时的常量,显式指定编码:

@PostMapping(value = "/your-api-path",
             consumes = "application/json;charset=UTF-8",
             produces = "application/json;charset=UTF-8")
public ResponseEntity<?> handleRequest(@RequestBody YourRequestDto requestDto) {
    // 业务逻辑处理
    return ResponseEntity.ok(requestDto);
}

4. 补充Tomcat编码配置

针对内嵌Tomcat,添加URI和请求体编码配置到application.properties:

server.tomcat.uri-encoding=UTF-8
server.tomcat.connection-timeout=20000

5. 验证请求端编码一致性

确认请求发送工具(如Postman、前端代码)实际使用UTF-8编码发送请求体,部分工具默认编码可能不是UTF-8,需手动设置。


内容的提问来源于stack exchange,提问作者shruti garg

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 15:32:02