Я создаю список CompletableFuture
для создания асинхронного запроса. Однако, когда я получаю ответ, я не знаю, какой ответ я получу. Есть ли способ узнать тело запроса, которое отправляется через CompletableFuture
?
Вот код для списка CompletableFuture
, результат которого требуется сопоставить с его запросом.
List<CompletableFuture<UserResponse>> userResponse = new ArrayList<>();
for (User user: users) {
UserRequest userRequest = UserRequest.builder()
.id(id)
.build();
CompletableFuture<UserResponse> userCompletableFuture = this.userClient
.checkUserRequest(
userRequest
);
userResponse.add(userCompletableFuture);
}
CompletableFuture.allOf(userCompletableFutures.toArray(new CompletableFuture[0]))
.exceptionally(ex -> null)
.join();
IntStream.range(0, userCompletableFutures.size())
.forEach(index -> {
try {
UserResponse userResponse = userCompletableFutures.get(index).get();
// Do something with the response and map it with the request.
} catch (Exception e) {
e.printStackTrace();
}
});
А вот и UserClient
@Async
public CompletableFuture<UserResponse> checkUserRequest(UserRequest request) {
CheckUserUrl url = new CheckUserUrl(apiUrl);
return CompletableFuture.supplyAsync(() ->
this.sendHttpRequest(
HttpRequestDTO.builder()
.url(url)
.httpMethod(HttpMethod.POST)
.request(new HttpEntity<>(request))
.build(),
UserResponse.class
)
);
}