java - 如何在运行时创建Mono序列

标签 java spring project-reactor reactor-netty

我正在尝试根据用户输入动态创建 Mono 序列。我正在调用 Rest API 并在 Mono 中获取 ClientResponse。我的用例是按顺序调用 2 个或更多 API,并且下一个 API 的输入有效负载取决于前一个 API 的输出。

我的硬编码序列操作看起来像


    public Mono<ResponseEntity> processSequentially(ServerHttpRequest request, JsonNode reqBody) {
            RequestData reqData = this.prepareReqMetadata(request, reqBody);
            return commonConnector.getApiResponse(reqData)
                    .flatMap(resp -> resp.bodyToMono(JsonNode.class))
                    .flatMap(respBody -> getApiResponse(request, metadataRequestBuilder, respBody))
                    .flatMap(resp -> resp.bodyToMono(JsonNode.class))
                    .flatMap(respBody -> getApiResponse(request, listingRequestBuilder, respBody))
        }

这工作正常,但我想让这个方法通用。我想从 POJO 列表中的用户获取所有必需的参数,并根据列表输入创建 flatMap 序列。因此,如果List的长度为2,则将有2个flatMap序列,如果长度为3或更多,则flatMap的数量也将是3或更多。

最佳答案

在您订阅之前不会发生任何事情,因此您可以在简单的循环中应用转换。

public Mono<ResponseEntity> processSequentially(ServerHttpRequest request, List<JsonNode> reqBody) {
    RequestData reqData = this.prepareReqMetadata(request, reqBody);

    Mono ret = commonConnector.getApiResponse(reqData);

    reqBody.forEach(jsonNode -> ret.flatMap(resp -> resp.bodyToMono(JsonNode.class))
                                .flatMap(respBody -> getApiResponse(request, metadataRequestBuilder, respBody))
    );

    return ret;
}

关于java - 如何在运行时创建Mono序列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56971424/

相关文章:

java - 在组件扫描中添加属性

java - 响应式(Reactive) spring-data-solr 存储库

java - doOnNext() 不会被调用 Spring Webflux

java - 如何使用 JMenuItem 将另一个类调用到我的主菜单类?

java - 关于守护线程为非守护线程提供一些服务

java - 如何将文件夹的所有文件加载到 Spring 中的资源列表中?

spring-boot - 与在 Kubernetes 集群上使用直接 RSocket 应用程序通信相比,Netifi 代理有何改进?

java - 如何修复此错误 : I/System. out : java. lang.ClassNotFoundException : com. mysql.jdbc.driver java.lang.NullPointerException

java - 将 BigInteger 存储到 Mysql

spring - Play 框架中的 Bootstrap Spring Boot