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
相关产品推荐
相关产品推荐

