Skip to content

Commit 9edae38

Browse files
authored
fix(ai): restore WebClient runtime auto-configuration
Use Spring Boot 4's dedicated WebClient starter and cover the AI client bean wiring with a regression test.
1 parent 38d7450 commit 9edae38

2 files changed

Lines changed: 36 additions & 1 deletion

File tree

ai-service/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@
2525
</dependency>
2626
<dependency>
2727
<groupId>org.springframework.boot</groupId>
28-
<artifactId>spring-boot-starter-webflux</artifactId>
28+
<artifactId>spring-boot-starter-webclient</artifactId>
2929
<exclusions>
3030
<exclusion>
3131
<groupId>io.netty</groupId>
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.devhire.ai.config;
2+
3+
import com.devhire.ai.client.AnthropicClaudeClient;
4+
import com.devhire.ai.tool.JobSearchTool;
5+
import org.junit.jupiter.api.Test;
6+
import org.springframework.boot.autoconfigure.AutoConfigurations;
7+
import org.springframework.boot.test.context.runner.ApplicationContextRunner;
8+
import org.springframework.boot.webclient.autoconfigure.WebClientAutoConfiguration;
9+
import org.springframework.context.annotation.Configuration;
10+
import org.springframework.context.annotation.Import;
11+
import org.springframework.web.reactive.function.client.WebClient;
12+
13+
import static org.assertj.core.api.Assertions.assertThat;
14+
15+
class AiWebClientConfigurationTest {
16+
17+
private final ApplicationContextRunner contextRunner = new ApplicationContextRunner()
18+
.withConfiguration(AutoConfigurations.of(WebClientAutoConfiguration.class))
19+
.withBean(AiProperties.class, AiProperties::new)
20+
.withUserConfiguration(ClientConfiguration.class);
21+
22+
@Test
23+
void autoConfiguresWebClientBuilderForAiClients() {
24+
contextRunner.run(context -> {
25+
assertThat(context).hasSingleBean(WebClient.Builder.class);
26+
assertThat(context).hasSingleBean(AnthropicClaudeClient.class);
27+
assertThat(context).hasSingleBean(JobSearchTool.class);
28+
});
29+
}
30+
31+
@Configuration(proxyBeanMethods = false)
32+
@Import({AnthropicClaudeClient.class, JobSearchTool.class})
33+
static class ClientConfiguration {
34+
}
35+
}

0 commit comments

Comments
 (0)