Spring Boot POST接收含西语重音JSON报Invalid UTF-8 middle错误如何解决
问题根因
Invalid UTF-8 middle错误本质是客户端发送的JSON请求实际编码不符合UTF-8规范,或是Spring Boot默认的HTTP消息转换器没有强制使用UTF-8解析请求体导致的。
解决方案
- 校验客户端请求编码
确保发送POST请求的客户端明确携带Content-Type: application/json;charset=UTF-8请求头,且请求体实际编码确实为UTF-8。常见问题是部分客户端默认用ISO-8859-1、Windows-1252编码发送带西语重音的字符,导致编码不匹配。如果用Postman测试,可在Body的raw选项右侧确认编码选择为UTF-8。 - 全局配置Spring MVC强制UTF-8编码
在application.properties或application.yml中添加以下配置,覆盖Spring默认编码规则:# 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-request=true spring.http.encoding.force-response=true - 自定义Jackson消息转换器强制UTF-8解析
若全局配置不生效,可手动注册Jackson的HTTP消息转换器,明确指定编码为UTF-8:@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setDefaultCharset(StandardCharsets.UTF_8); converter.setSupportedMediaTypes(Arrays.asList(MediaType.APPLICATION_JSON)); // 优先使用自定义转换器 converters.add(0, converter); } } - 补充实体类无参构造函数
你当前的TranslateString实体类仅提供了全参数构造函数,Jackson反序列化时如果找不到无参构造函数也可能触发解析异常,给实体类补充无参构造即可:public TranslateString() { }
内容的提问来源于stack exchange,提问作者DD_Alberto
相关产品推荐
相关产品推荐

