New posts

This commit is contained in:
2026-11-06 21:44:06 +05:30
parent dc13293046
commit 8da3374155
51 changed files with 2099 additions and 0 deletions
+38
View File
@@ -0,0 +1,38 @@
# http-service-clients
Companion module for [**Spring Boot 4 HTTP Service Clients: @HttpExchange Interfaces with RestClient (Complete Guide)**](https://ankurm.com/spring-boot-4-http-service-clients/)
on ankurm.com. Declarative `@HttpExchange` interfaces registered with `@ImportHttpServices`, configured
through `spring.http.serviceclient.<group>.*`, with error handling, retries, authentication and tests.
Everything runs offline: the tests start a small stub upstream (`stub/StubServer`, JDK `HttpServer`) on a
random port and the clients call it over real HTTP. Nothing talks to jsonplaceholder.typicode.com.
## Versions
| | |
|---|---|
| Spring Boot | 4.1.2 |
| Spring Framework | 7.0.10 |
| Spring Security | 7.1.2 (managed by Boot) |
| Resilience4j (retry comparison only) | 2.4.0 |
| JDK | 25 (LTS) |
## Run
```bash
export JAVA_HOME=/path/to/jdk-25
./scripts/run-all.sh # mvn test; rewrites output/*.txt (11 tests)
./scripts/run-stub.sh # optional: the stub on port 18601, to poke with curl
```
## Files
| Path | What |
|---|---|
| `src/main/java/.../client/` | the `@HttpExchange` interfaces (posts, params, flaky, resilient, bearer, api key, OAuth2, GitHub) |
| `src/main/java/.../config/HttpClientsConfig.java` | `@ImportHttpServices` groups and `RestClientHttpServiceGroupConfigurer` beans |
| `src/main/java/.../error/` | status handler, custom exceptions, `@RestControllerAdvice` |
| `src/main/java/.../stub/StubServer.java` | the local upstream |
| `src/main/resources/application.yml` | base URLs, timeouts, default headers, OAuth2 registration |
| `src/test/java/.../Step01..Step09*Test.java` | one test per article section; each writes its transcript |
| `output/01..09c-*.txt` | captured output quoted in the article |