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

升级至Spring Boot 2.2.4后RestTemplateBuilder未加载的问题求助

解决Spring Boot 2.2.4.RELEASE中RestTemplateBuilder自动配置失效的问题

问题根源

你猜的完全没错——Spring Boot 2.2.x版本开始,RestTemplateAutoConfiguration新增了@Conditional(NotReactiveWebApplicationCondition.class)条件注解,这意味着只有在非响应式Web应用上下文(Servlet Web或非Web环境)中,RestTemplateBuilder的自动配置才会生效。你的测试环境被检测到是ReactiveWebApplicationContext,所以自动配置逻辑被直接跳过了。

几种可行的解决方案

1. 排除不必要的响应式自动配置(如果项目不是响应式栈)

如果你的项目本质还是Servlet栈(依赖的是spring-boot-starter-web而非spring-boot-starter-webflux),只是测试环境意外触发了响应式上下文,可以在测试类中排除响应式相关的自动配置类:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
        exclude = {ReactiveWebServerAutoConfiguration.class, ReactiveWebClientAutoConfiguration.class})
public class RoutesIT {
    // 测试代码
}

这样就能让测试环境回到Servlet Web上下文,RestTemplateBuilder的自动配置会正常加载。

2. 手动复用自动配置逻辑(如果需要混合Servlet和Reactive模式)

如果你的项目确实需要同时支持Servlet和响应式组件,不建议完全从零创建RestTemplateBuilder,而是复用Spring自动配置的配置器逻辑,保证和原生自动配置行为一致:

@Configuration
public class RestTemplateConfig {
    @Bean
    public RestTemplateBuilder restTemplateBuilder(RestTemplateBuilderConfigurer configurer) {
        // 复用自动配置中的属性、消息转换器等配置
        return configurer.configure(new RestTemplateBuilder());
    }
}

这个Bean会替代自动配置的实例,但会保留所有通过application.properties/application.yml配置的RestTemplate相关属性(比如rest-template.connect-timeout等)。

3. 检查依赖是否误引入响应式组件

仔细检查你的项目依赖(pom.xml或build.gradle),看是否在升级过程中不小心引入了spring-boot-starter-webflux。如果项目不需要响应式支持,直接移除这个依赖,RestTemplate的自动配置就会恢复正常。

内容的提问来源于stack exchange,提问作者lukasz-dd

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 13:17:52