Spring Boot - WebFlux сохраняет контекст результата с идентификатором при запуске в параллельном режиме - PullRequest
0 голосов
/ 01 мая 2020

При использовании веб-клиента Spring для запроса JSON из REST API тело ответа от сервера сохраняется в простом Map. Запрос к серверу содержит идентификатор, но он не включен в ответ, но требуется для интерпретации ответа.

Я бы хотел включить идентификатор в результат параллельного вызова, поэтому вместо этого вместо List<Map> data должно быть Map<UUID,Map> data или аналогичным. Таким образом, ответ сервера соединяется с идентификатором, который использовался для получения ответа.

        List<Map> data = Flux.fromIterable(ids)
                .parallel()
                .runOn(Schedulers.elastic())
                .flatMap(this::callAPI).sequential().collectList().block();
    private Mono<Map> callAPI(UUID id) {
        return client.get().uri(uriBuilder -> uriBuilder
                .path("/{id}/")
                .build(id))
                .retrieve().bodyToMono(Map.class);
    }

1 Ответ

0 голосов
/ 03 мая 2020

Из комментария @ThomasAndolf

Не возвращая Mono<Map> из функции callApi. Верните Map и Id в объекте-обертке, который вы можете позже использовать для переназначения в нужную вам структуру .bodyToMono(Map.class).flatMap(map -> { return Mono.just(new Response(id, map)); }); - Томас Андольф 22 часа go

...