Java CompletableFuture получить свой запрос - PullRequest
1 голос
/ 12 октября 2019

Я создаю список 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
        )
    );
}
...