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

Spring Boot从2.7.14升级至3.2.4后出现415不支持媒体类型问题

解决Spring Boot 3.2.4中RestTemplate 415 Unsupported Media Type问题

首先注意你提供的代码中存在拼写错误:@Configuartion应为@Configuration,RestTemplae应为RestTemplate,确保实际运行代码中没有此类问题。

以下是针对你遇到问题的排查方向和解决方案:

1. 检查并显式配置消息转换器

Spring Boot 3.x(基于Spring Framework 6)对RestTemplate的默认消息转换器配置做了调整,可能导致JsonNode类型的请求体处理逻辑变化。建议显式添加并优先使用Jackson消息转换器:

修改你的RestTemplateConfiguration:

@Configuration
public class RestTemplateConfiguration {
    @Bean
    public RestTemplate restTemplate(RestTemplateFactory restTemplateFactory) {
        RestTemplate restTemplate = restTemplateFactory.restTemplate();
        
        // 显式配置Jackson消息转换器,确保优先处理JSON类型
        MappingJackson2HttpMessageConverter jacksonConverter = new MappingJackson2HttpMessageConverter();
        jacksonConverter.setSupportedMediaTypes(Arrays.asList(
            MediaType.APPLICATION_JSON,
            MediaType.APPLICATION_JSON_UTF8,
            MediaType.TEXT_PLAIN
        ));
        // 将Jackson转换器放到消息转换器列表最前面,确保优先被使用
        restTemplate.getMessageConverters().add(0, jacksonConverter);
        
        SimpleClientHttpRequestFactory requestFactory = new SimpleClientHttpRequestFactory();
        requestFactory.setOutputStreaming(false);
        ClientHttpRequestFactory factory = new BufferingClientHttpRequestFactory(requestFactory);
        restTemplate.setRequestFactory(factory);
        
        // 暂时注释拦截器,排查是否是拦截器导致的问题
        // restTemplate.getInterceptors().add(new AddResponseBodyWrapperInterceptor());
        
        return restTemplate;
    }
}

2. 排查请求Content-Type隐式设置问题

当HttpEntity的body为null时,Spring Boot 3.x的RestTemplate可能会隐式添加不符合服务端要求的Content-Type头。建议在创建HttpEntity时,若body为空,显式清空Content-Type:

// 示例:创建空body的HttpEntity时,确保不携带Content-Type
HttpHeaders headers = new HttpHeaders();
// 移除可能自动添加的Content-Type
headers.remove(HttpHeaders.CONTENT_TYPE);
HttpEntity<JsonNode> httpEntity = new HttpEntity<>(null, headers);

3. 验证拦截器兼容性

你的AddResponseBodyWrapperInterceptor可能在Spring 6环境下存在兼容性问题,比如修改了请求头或请求体的处理逻辑。暂时注释掉拦截器配置,测试请求是否正常,以此排除拦截器的影响。

4. 检查服务端实际接收的请求细节

虽然客户端日志显示请求头一致,但建议查看服务端的访问日志,确认实际接收到的Content-Type、Accept等头信息是否与预期一致。某些情况下,客户端日志可能无法捕获框架自动添加的头信息。

5. 确认Jackson依赖与配置

Spring Boot 3.x依赖Jackson 2.15+版本,若你的项目中有自定义的Jackson配置(如ObjectMapper Bean),需确认其配置是否与Spring 6兼容,比如是否启用了正确的序列化/反序列化特性。

内容的提问来源于stack exchange,提问作者Vivek

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 01:50:20