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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 04:23:12