如何解决Spring中Content-Type为UTF-8的HttpMediaTypeNotSupportedException错误?
报错信息
org.springframework.web.HttpMediaTypeNotSupportedException: Content-Type 'application/json;charset=UTF-8' is not supported
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:213)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:159)
你已经尝试了@JsonManagedReference和@JsonBackReference处理双向引用,但问题仍存在,可从以下几个方向排查:
检查Jackson依赖完整性
确认项目中是否引入了jackson-databind、jackson-core、jackson-annotations这三个核心依赖,且版本保持一致,避免因依赖缺失或冲突导致JSON处理器无法正常工作。验证请求体格式合法性
即便请求头标注了JSON类型,实际请求体可能存在语法错误(比如引号缺失、逗号不规范、括号不匹配等)。可以将请求体复制到JSON校验工具中检查,或用Postman发送标准格式的JSON请求测试。检查Spring MVC消息转换器配置
确认Spring容器中正确配置了MappingJackson2HttpMessageConverter,并确保其支持带charset的JSON媒体类型:@Configuration public class WebConfig implements WebMvcConfigurer { @Override public void configureMessageConverters(List<HttpMessageConverter<?>> converters) { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); converter.setSupportedMediaTypes(Arrays.asList( MediaType.APPLICATION_JSON, MediaType.APPLICATION_JSON_UTF8 )); converters.add(converter); } }检查Controller参数绑定
确认接收请求体的Controller方法参数已正确添加@RequestBody注解,且参数对应的POJO类无无法被Jackson序列化的特殊字段(比如自定义类型未配置序列化器)。排查请求头篡改问题
部分代理或网关可能会修改请求头的Content-Type值,可在Controller中打印请求头信息,确认实际传入的Content-Type是否符合预期,也可尝试去掉charset部分,直接用application/json发送请求测试。
内容的提问来源于stack exchange,提问作者Arindam Dutta

