当前位置: 首页 > 知识库问答 >
问题:

使用SpringWebClient同时进行分页API调用

慎兴业
2023-03-14

我必须使用WebClient进行分页API调用,并最终组合所有结果。例如:个人最新1000交易详情。在一次调用中,我将在json响应(List)中获得最大100个对象。这个人最多只能得到1000条记录。

在伪代码java中,它可能看起来像这样

    int Total = 1000;
    int maxEachCall = 100;
    int noOfCalls = maxTotal/maxEachCall;
    int startIndex = 0;

    List<MyDto> mailList = new ArrayList();

    for(int i =startIndex; i<noOfCalls ;i+100){
        List<MyDto> list =  webClient.get().uri(baseUri+"?startIndex"+startIndex)
                        .retrieve()
                        .bodyToMono(MyDto.class)                            
                        .retry(3)
                        .block();
        mainList.addAll(list);
        if(startIndex>900 || list.size()<100){
            break;
        }
    }

如何在SpringMVC中以反应式方式编写相同的内容而不阻塞?

像这样的东西???我不知道。帮助我

    int Total = 1000;
    int maxEachCall = 100;
    int noOfCalls = maxTotal/maxEachCall;
      int startIndex = 0;
    Flux.range(1,noOfCalls)
        .flatMap(
            // tried to call api using startIndex but can't use startIndex here or manipulate it
        )
        .doOnError(e->LOGGER.info("Exception occured ",e))
        .blockLast(); ???

共有1个答案

严宏朗
2023-03-14

你可以做类似的事情:

Flux.range(0, 10)
        .map(start -> start * 100)
        .flatMap(
                start -> webClient.get()
                        .uri(baseUri + "?startIndex=" + start)
                        .retrieve()
                        .bodyToMono(MyDtoCollection.class)
                        .map(c -> splitCollectionIntoIndividualMyDto(c)) //or something to that effect, since you'll get 100 `MyDto` at a time and presumably need to split them.
        )
        .collectList();

...这将为您提供一个Mono

 类似资料:
  • 问题内容: 我正在为我的系统中的实体实现“高级搜索”类功能,以便用户可以使用对该实体属性的多个条件(eq,ne,gt,lt,like等)来搜索该实体。我正在使用JPA的Criteria API动态生成Criteria查询,然后使用&支持分页。到现在为止一切都很好,但是现在我想在结果网格上显示结果总数,但是我没有看到直接获取Criteria查询总数的直接方法。 这是我的代码的样子: 我的结果集可能很

  • 假设我有2个微服务A和B。现在对于服务A上的特定请求,A需要对B进行多个相同API的API调用(使用不同的参数)。最初,我使用模拟客户端在微服务之间进行Rest调用[隐式支持负载平衡、服务发现和添加端口元数据等来自模拟客户端]。 这种方法的问题是,调用是同步的,并且需要大量时间。如何/使用什么来触发多个请求并以非阻塞和异步的方式等待响应? TIA!

  • 问题内容: 我想使用itext生成pdf。我会在某些时候添加内容以进行分页。我需要插入几个单独的conenidos依赖源,所以我要求用户在单独的页面上插入。有任何想法吗??? 问题答案: 调用告诉iText将后续对象放置在新页面上。仅当您放置下一个对象时,才会真正创建新页面。另外,仅在当前页面不为空白时创建一个新页面;否则,仅创建一个新页面。否则,它将被忽略;您可以用来克服这一点。 请参见下面的链

  • 问题内容: 细节 来自应用程序的HQL查询: 查询返回300万条记录,而对于分页,我们仅设置了其中的50条记录,分页页面的运行速度非常慢,因为每次刷新时,我们都调用查询来获取300万条记录,而其中只有50条记录。 我的主要问题是 HQL是始终运行并命中数据库还是运行命中会话或内存以查找数据,如果它每次都运行时命中数据库并获取结果集,那么从性能的角度来看,这是非常合适的,什么是改进的最佳解决方案它?

  • 问题内容: 问题 我需要在Django模板中使用jQuery进行Ajax分页。 情况 我的模板中包含以下代码: 和我的看法: 结论 因此,每当我按“下一步”时,它实际上会发出Ajax请求,但数据不会在表中呈现。 对于分页,使用django.core.paginator,我真的很愿意在可能的情况下坚持使用。 您能看到代码缺失/错误吗? 问题答案: 我没有发现错误,但下面向您展示如何解决此任务。我认为

  • 我想用iText生成一个pdf。我会在某个时候添加内容以进行分页。我需要插入几个单独的conenidos依赖源,所以我要求用户在单独的页面上这样做。有什么想法吗???