dify-spring-boot-starter
  • 介绍
  • 快速开始
  • 安装
  • 配置
  • 客户端构建器
  • 服务状态监控
  • 功能

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • 事件

    • 介绍
    • 聊天事件
  • 使用配置
  • 自定义配置
  • v2.x
  • v1.x
  • v0.x
  • 更新日志
  • 简体中文
  • English
GitHub
  • 介绍
  • 快速开始
  • 安装
  • 配置
  • 客户端构建器
  • 服务状态监控
  • 功能

    • Chat API
    • Workflow API
    • Dataset API
    • Server API
  • 事件

    • 介绍
    • 聊天事件
  • 使用配置
  • 自定义配置
  • v2.x
  • v1.x
  • v0.x
  • 更新日志
  • 简体中文
  • English
GitHub
  • 配置

    • 使用配置
    • 自定义配置

自定义配置

Spring Boot 项目自定义

HTTP 客户端自定义

WebClient

适用于所有 Spring Boot 版本(2.x/3.x/4.x)。支持自定义 WebClient.Builder,覆盖默认实例。

@Bean
public WebClient.Builder webClientBuilder() {
    HttpClient httpClient = HttpClient.create()
            .protocol(HttpProtocol.HTTP11)
            .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000)
            .responseTimeout(Duration.ofSeconds(30));

    return WebClient.builder()
            .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .clientConnector(new ReactorClientHttpConnector(httpClient));
}

RestClient

适用于 Spring Boot 3.2+ 和 Spring Boot 4.x。支持自定义 RestClient.Builder,覆盖默认实例。

@Bean
public RestClient.Builder restClientBuilder() {
    return RestClient.builder()
            .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
            .requestFactory(new JdkClientHttpRequestFactory());
}

注意: Spring Boot 2.x 不支持 RestClient,框架会自动使用 WebClient。

JSON 编解码器自定义

使用自定义 JsonMapper (Jackson)

@Bean
public JsonMapper jsonMapper() {
    return JacksonJsonMapper.getInstance();
}

完整自定义示例

@Configuration
public class DifyCustomConfiguration {

    @Bean
    public WebClient.Builder webClientBuilder() {
        HttpClient httpClient = HttpClient.create()
                .protocol(HttpProtocol.HTTP11)
                .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 30000)
                .responseTimeout(Duration.ofSeconds(30));

        return WebClient.builder()
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE)
                .clientConnector(new ReactorClientHttpConnector(httpClient));
    }

    @Bean
    public RestClient.Builder restClientBuilder() {
        return RestClient.builder()
                .defaultHeader(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE);
    }

    @Bean
    public JsonMapper jsonMapper() {
        return JacksonJsonMapper.getInstance();
    }
}

纯 Java 项目自定义

对于纯 Java 项目,您可以通过 HttpClientFactory 的链式方法进行自定义配置。

添加默认请求头

import io.github.guoshiqiufeng.dify.client.integration.okhttp.http.JavaHttpClientFactory;
import io.github.guoshiqiufeng.dify.client.codec.jackson.JacksonJsonMapper;
import io.github.guoshiqiufeng.dify.client.core.http.HttpClientFactory;

// 创建基础工厂
JavaHttpClientFactory baseFactory = new JavaHttpClientFactory(JacksonJsonMapper.getInstance());

// 添加默认请求头
HttpClientFactory customFactory = baseFactory
        .defaultHeader("X-Custom-Header", "custom-value")
        .defaultHeader("User-Agent", "MyApp/1.0");

// 使用自定义工厂创建客户端
DifyChatClient client = DifyChatBuilder.builder()
        .baseUrl("https://api.dify.ai")
        .clientConfig(clientConfig)
        .httpClientFactory(customFactory)
        .build();

添加自定义拦截器

import okhttp3.Interceptor;
import okhttp3.Response;

// 创建自定义拦截器
Interceptor loggingInterceptor = chain -> {
    okhttp3.Request request = chain.request();
    System.out.println("Request: " + request.url());
    Response response = chain.proceed(request);
    System.out.println("Response: " + response.code());
    return response;
};

// 创建工厂并添加拦截器
HttpClientFactory customFactory = new JavaHttpClientFactory(JacksonJsonMapper.getInstance())
        .interceptor(loggingInterceptor);

// 使用自定义工厂创建客户端
DifyChatClient client = DifyChatBuilder.builder()
        .baseUrl("https://api.dify.ai")
        .clientConfig(clientConfig)
        .httpClientFactory(customFactory)
        .build();

配置超时时间

超时时间通过 ClientConfig 配置:

import io.github.guoshiqiufeng.dify.core.config.DifyProperties;

// 创建客户端配置
DifyProperties.ClientConfig clientConfig = new DifyProperties.ClientConfig();
clientConfig.setConnectTimeout(60); // 连接超时 60 秒
clientConfig.setReadTimeout(60);    // 读取超时 60 秒
clientConfig.setWriteTimeout(60);   // 写入超时 60 秒
clientConfig.setLogging(true);      // 启用日志

// 使用配置创建客户端
DifyChatClient client = DifyChatBuilder.builder()
        .baseUrl("https://api.dify.ai")
        .clientConfig(clientConfig)
        .httpClientFactory(new JavaHttpClientFactory(JacksonJsonMapper.getInstance()))
        .build();

自定义 JSON 编解码器

使用 Jackson 编解码器(默认)

import io.github.guoshiqiufeng.dify.client.codec.jackson.JacksonJsonMapper;

// 使用默认的 Jackson 映射器
JavaHttpClientFactory httpClientFactory = new JavaHttpClientFactory(JacksonJsonMapper.getInstance());

使用 Gson 编解码器

import io.github.guoshiqiufeng.dify.client.codec.gson.GsonJsonMapper;

// 使用 Gson 映射器
JavaHttpClientFactory httpClientFactory = new JavaHttpClientFactory(GsonJsonMapper.getInstance());

使用 Jackson 3 编解码器(Spring Boot 4.x)

import io.github.guoshiqiufeng.dify.client.codec.jackson3.Jackson3JsonMapper;

// 使用 Jackson 3 映射器
JavaHttpClientFactory httpClientFactory = new JavaHttpClientFactory(Jackson3JsonMapper.getInstance());

注意: 所有 JSON 映射器都是单例模式,使用 getInstance() 方法获取实例。如果需要自定义配置,可以通过 getObjectMapper() 或 getGson() 获取底层实例进行配置。

完整自定义示例

import io.github.guoshiqiufeng.dify.client.integration.okhttp.http.JavaHttpClientFactory;
import io.github.guoshiqiufeng.dify.client.codec.jackson.JacksonJsonMapper;
import io.github.guoshiqiufeng.dify.core.config.DifyProperties;
import io.github.guoshiqiufeng.dify.client.core.http.HttpClientFactory;
import okhttp3.Interceptor;

// 1. 使用 Jackson 映射器
JacksonJsonMapper jsonMapper = JacksonJsonMapper.getInstance();

// 2. 创建自定义拦截器
Interceptor authInterceptor = chain -> {
    okhttp3.Request request = chain.request().newBuilder()
            .addHeader("Authorization", "Bearer token")
            .build();
    return chain.proceed(request);
};

// 3. 创建 HTTP 客户端工厂并配置
HttpClientFactory httpClientFactory = new JavaHttpClientFactory(jsonMapper)
        .defaultHeader("X-App-Version", "1.0.0")
        .interceptor(authInterceptor);

// 4. 创建客户端配置
DifyProperties.ClientConfig clientConfig = new DifyProperties.ClientConfig();
clientConfig.setConnectTimeout(60);
clientConfig.setReadTimeout(60);
clientConfig.setWriteTimeout(60);
clientConfig.setLogging(true);
clientConfig.setSkipNull(true);

// 5. 使用自定义配置创建客户端
DifyChatClient client = DifyChatBuilder.builder()
        .baseUrl("https://api.dify.ai")
        .clientConfig(clientConfig)
        .httpClientFactory(httpClientFactory)
        .build();

版本说明

  • Spring Boot 2.x: 仅支持 WebClient
  • Spring Boot 3.0-3.1: 仅支持 WebClient
  • Spring Boot 3.2+: 支持 WebClient 和 RestClient
  • Spring Boot 4.x: 支持 WebClient 和 RestClient
  • 纯 Java 项目: 使用 OkHttp 客户端
在 GitHub 上编辑此页
上次更新: 2026/1/23 07:25
Prev
使用配置