Spring Boot @PatchMapping遇Content-Type不支持异常的解决求助
问题原因分析
触发HttpMediaTypeNotSupportedException的核心原因是Spring默认采用严格的媒体类型匹配规则:
你在@PatchMapping的consumes属性中指定的是application/json(对应MediaType.APPLICATION_JSON_VALUE),但实际请求的Content-Type头包含了额外参数;charset=UTF-8,两者被Spring判定为不匹配的媒体类型,因此抛出异常。
解决方案
以下是几种可行的解决方式,按需选择:
方案1:修改接口的consumes属性,兼容带charset的JSON类型
直接在@PatchMapping的consumes中添加带charset的媒体类型,或者用通配符匹配所有JSON变种:
// 方式1:明确指定带charset的类型 @PatchMapping(value = "", consumes = {MediaType.APPLICATION_JSON_VALUE, "application/json;charset=UTF-8"}) // 方式2:用通配符匹配所有application/json相关类型(更灵活) @PatchMapping(value = "", consumes = "application/json*")
方案2:全局配置Spring放松媒体类型匹配
如果不想逐个修改接口,可以通过全局配置让Spring忽略媒体类型中的参数(比如charset):
创建WebMvc配置类:
@Configuration public class WebMvcConfig implements WebMvcConfigurer { @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.defaultContentType(MediaType.APPLICATION_JSON) // 关键配置:忽略媒体类型的附加参数 .ignoreMediaTypeParameters(true); } }
该配置会让Spring在匹配媒体类型时,只校验主类型(application)和子类型(json),忽略;charset=UTF-8这类附加参数。
方案3:检查并配置Jackson消息转换器
如果上述方案无效,确认是否自定义了Jackson消息转换器,确保其支持带charset的JSON类型:
@Bean public MappingJackson2HttpMessageConverter jacksonMessageConverter() { MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter(); // 添加支持的媒体类型,包含带charset的JSON converter.setSupportedMediaTypes(Arrays.asList( MediaType.APPLICATION_JSON, MediaType.parseMediaType("application/json;charset=UTF-8") )); return converter; }
注:Spring 5.2+中
MediaType.APPLICATION_JSON_UTF8已被标记为过时,建议直接解析字符串类型的媒体类型。
内容的提问来源于stack exchange,提问作者tomas cop
相关产品推荐
相关产品推荐

