Mono возвращает пустой список

0

Я пытаюсь позвонить, getProductContract()но возвращается пустой список. Я думаю, это потому, что Mono не исполняется.

Может ли кто-нибудь помочь мне, как выполнять звонки, чтобы я получил resultListобратно заполненные ?

Образец кода

//Controller.java:

service.getProductContract()


// Service.java
public Mono<List<ProductContract>> getProductContract() {
        Set<String> productIdList = new HashSet<>();
        productIdList.add("p123");
        productIdList.add("p456");

        List<ProductContract> resultList = new ArrayList<>();

        productIdList.forEach(productId -> prodRepository.getProductDetails(productId)
                .flatMap(productDetail -> prodRepository.getProductContracts(productDetail.getProductContractId()))
                .mapNotNull(contracts -> resultList.add(contracts.stream().findFirst().isPresent()? contracts.stream().findFirst().get():null))
                .subscribeOn(Schedulers.boundedElastic())
        );
       log.info("size {}",String.valueOf(resultList.size())); //-> Size is ZERO
       return Mono.just(resultList);

    }

// Repository.java

public Mono<List<ProductContract>> getProductContracts (String contractId){...} // can return multiple contacts for 1 id

public Mono<String> getProductDetails(String productId){...}

1

Этот productIdList....flapMap...блок выполняется асинхронно, при печати размера в log.info, он был равен нулю, что означает, что выполнение не завершено.

Вот такой лучший способ собрать все ресурсы в вашем случае.

return Flux.fromIterable(productIdList)
     .flatMap(productId -> prodRepository.getProductDetails(productId))
     .flatMap(p-> ....getContacts)
     .map(....build a contact dto instance...)
     

Если хотите вернуть Mono<List<ContactDto>>, просто позвоните Flux.collectList.

0