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

如何更换Spring AI的RestClient实现?拟采用JdkClientHttpRequestFactory

解决Spring AI中替换RestClient为JdkClientHttpRequestFactory的问题

你直接创建RestClient Bean不生效的核心原因是:Spring AI内部并非直接依赖自定义的RestClient实例,而是通过RestClient.Builder来构建自身所需的RestClient对象。以下是几种可行的解决方式:

方式一:全局替换RestClient.Builder

创建配置类自定义RestClient.Builder Bean,让Spring AI复用这个配置好的Builder来构建RestClient:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.JdkClientHttpRequestFactory;
import org.springframework.web.client.RestClient;

@Configuration
public class SpringAiRestClientConfig {

    @Bean
    public RestClient.Builder restClientBuilder() {
        return RestClient.builder()
                .requestFactory(new JdkClientHttpRequestFactory());
    }
}

该配置会全局生效,所有Spring AI模块使用的RestClient都会基于这个Builder创建,自动应用JDK请求工厂。

方式二:仅在测试场景生效

如果只需要在测试环境替换,可通过@Profile限定配置类的生效范围:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Profile;
import org.springframework.http.client.JdkClientHttpRequestFactory;
import org.springframework.web.client.RestClient;

@Configuration
@Profile("test")
public class TestSpringAiRestClientConfig {

    @Bean
    public RestClient.Builder restClientBuilder() {
        return RestClient.builder()
                .requestFactory(new JdkClientHttpRequestFactory());
    }
}

测试时激活test Profile即可,不会影响生产环境的配置。

方式三:针对特定Spring AI模块直接替换API实例

部分Spring AI模块(如OpenAI)有自己的API客户端类,可直接构建带自定义RestClient的API实例:

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.http.client.JdkClientHttpRequestFactory;
import org.springframework.ai.openai.OpenAiChatClient;
import org.springframework.ai.openai.OpenAiChatOptions;
import org.springframework.ai.openai.api.OpenAiApi;
import org.springframework.web.client.RestClient;

@Configuration
public class OpenAiCustomConfig {

    @Bean
    public OpenAiApi openAiApi() {
        RestClient customRestClient = RestClient.builder()
                .requestFactory(new JdkClientHttpRequestFactory())
                .build();
        return new OpenAiApi(customRestClient);
    }

    @Bean
    public OpenAiChatClient openAiChatClient(OpenAiApi openAiApi, OpenAiChatOptions openAiChatOptions) {
        return new OpenAiChatClient(openAiApi, openAiChatOptions);
    }
}

这种方式直接替换了Spring AI客户端依赖的底层API实例,确保配置100%生效。

排查要点

  • 确认Spring AI版本:部分旧版本可能使用WebClient而非RestClient,需对应调整配置
  • 检查配置类是否被Spring扫描:确保配置类所在包被@ComponentScan覆盖,或直接放在主启动类同包下
  • 排查条件注解:如果配置类使用了@Conditional相关注解,确认触发条件是否满足

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 11:57:21