The VertxArk client returns io.vertx.core.Future<T> - Vert.x native async without Mutiny or CompletableFuture.
<dependency>
<groupId>xyz.juandiii</groupId>
<artifactId>ark-vertx</artifactId>
</dependency>
<dependency>
<groupId>xyz.juandiii</groupId>
<artifactId>ark-transport-vertx</artifactId>
</dependency>- Interface:
VertxHttpTransport- returnsFuture<RawResponse> - Implementation:
ArkVertxFutureTransport- backed by Vert.xWebClient
Vertx vertx = Vertx.vertx();
WebClient webClient = WebClient.create(vertx, new WebClientOptions()
.setSsl(true)
.setConnectTimeout(5000)
.setMaxPoolSize(50));
VertxArk client = VertxArkClient.builder()
.serializer(new JacksonClassicSerializer(new ObjectMapper()))
.transport(new ArkVertxFutureTransport(webClient))
.baseUrl("https://api.example.com")
.build();Future<User> user = client.get("/users/1")
.accept(MediaType.APPLICATION_JSON)
.retrieve()
.body(User.class);Future<User> created = client.post("/users")
.contentType(MediaType.APPLICATION_JSON)
.body(new User("Juan", "juan@example.com"))
.retrieve()
.body(User.class);Future<ArkResponse<Void>> response = client.delete("/users/1")
.retrieve()
.toBodilessEntity();Future<ArkResponse<User>> response = client.get("/users/1")
.retrieve()
.toEntity(User.class);
response.onSuccess(r -> {
int status = r.statusCode();
User body = r.body();
});Use Vert.x Future API for chaining:
client.get("/users/1")
.retrieve()
.body(User.class)
.compose(user -> saveToDb(user))
.onSuccess(saved -> log.info("Saved: {}", saved))
.onFailure(err -> log.error("Failed", err));See Error Handling for the full exception hierarchy. Errors propagate through the Future:
client.get("/users/1")
.retrieve()
.body(User.class)
.onFailure(err -> {
if (err instanceof NotFoundException) {
// 404
} else if (err instanceof TimeoutException) {
// request timed out
}
});