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

Spring Boot3中RestTemplate配置OkHttp3ClientHttpRequestFactory报错:不支持请求体缓冲

问题分析与解决方案

问题原因

Spring Boot 3.1.2版本中,若项目依赖了OkHttp,RestTemplateBuilder会自动配置OkHttp3ClientHttpRequestFactory作为底层请求工厂。而这个工厂类不支持设置请求体缓冲开关(setBufferRequestBody方法)——因为OkHttp的请求体处理机制本身就是流式的,不需要手动控制缓冲,所以调用setBufferRequestBody(false)会触发该错误。这是Spring Boot 3.x在RestTemplate自动配置逻辑上的变化,和2.x版本默认使用SimpleClientHttpRequestFactory的行为不同。

解决方案

提供三种可选方案,根据你的实际需求选择:

方案1:移除OkHttp依赖(若无需使用)

如果项目不需要OkHttp作为HTTP客户端,直接移除相关依赖,Spring Boot会自动切换回SimpleClientHttpRequestFactory,此时setBufferRequestBody(false)的配置就能正常生效。

方案2:保留OkHttp,移除setBufferRequestBody(false)配置

OkHttp本身默认采用流式处理请求体,不需要手动关闭缓冲,直接去掉该配置即可:

@Bean("MyRestTemplate")
public RestTemplate myRestTemplate(final RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder.build();
}

方案3:手动指定使用SimpleClientHttpRequestFactory

如果必须保留setBufferRequestBody(false)的配置,同时又不想移除OkHttp依赖,可以手动指定请求工厂为SimpleClientHttpRequestFactory:

@Bean("MyRestTemplate")
public RestTemplate myRestTemplate(final RestTemplateBuilder restTemplateBuilder) {
    return restTemplateBuilder
            .requestFactory(SimpleClientHttpRequestFactory.class)
            .setBufferRequestBody(false)
            .build();
}

内容的提问来源于stack exchange,提问作者Martijn Jan Jaap de Bruin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:17:14