CompletionStage API предоставляет несколько различных способов обработки и работы с непроверенными исключениями.Но в вашем случае вы получаете исключение Checked, и вам не повезло.Вы должны либо справиться с этим, либо выбросить его наружу по направлению к своему абоненту.Вот один из способов сделать это, если вы предпочитаете последний подход.
Failsafe.with(retryPolicy).with(executor).future(() -> CompletableFuture.supplyAsync(() -> {
try {
// Remainder omitted
return response;
} catch (IOException e) {
throw new CompletionException(e);
}
}).thenApplyAsync(response -> "Response: " + response)
.thenAccept(System.out::println));