GET请求数据量大造成的问题

在实际的开发过程中,我们偶尔或者遇到过要导出列表中所有的数据。假设列表中有十万条数据,那么导出所有,意味着要大批量的走查询接口,通常我们的后台的API接口GET请求支持的查询长度不得大于1000,(比如我根据一千个用户id查询用户的真实姓名),那么GET请求显然不太支持,解决办法可以使用Post请求。当然如果不改的话其实也有笨方法。如果在实际开发过程中能帮助你解决问题实在是很高兴。解决方法如下。

  • 我们可以把接口请求GET 改为Post ,使用@RequestBody传递参数。
  • 我们可以使用递归的方式进行分批查询。也是解决的方法之一。具体实现如下
    封装了一个工具类
    UserInfoManager
    定义了一个常量 一次性查询3000条
private final Double SEPARATE = 3000D;

  public Map<String, UserInfoDto> getByUserIds(List<String> userIds) {

        if (CollectionUtils.isEmpty(userIds)) {
            return Maps.newHashMap();
        }

        if (userIds.size() <= SEPARATE) {
            return getgUserMapByIds(userIds);
        }

        Map<String, UserInfoDto> all = new HashMap<>(16);
        double x = Math.ceil(userIds.size() / SEPARATE);
        int start = 0;
        int end = 0;
        for (int i = 0; i < x; i++) {
            end = (int) ((i + 1) * SEPARATE);
            end = end > userIds.size() ? userIds.size() : end;
            all.putAll(getgUserMapByIds(userIds.subList(start, end)));
            start = end;
        }
        return all;
    }


    public Map<String, DaPengUserResource> getgUserMapByIds(List<String> userIds) {
      // 根据userIds查询user微服务 
        List<UserInfoDto> userLists = userClient.getUserByIds(userIds);
        if (!CollectionUtils.isEmpty(userLists )) {
            return a.stream().collect(Collectors.toMap(UserInfoDto::getUserId, c -> c));
        } else {
            return Maps.newHashMap();
        }
    }

posted @   烫手的山芋  阅读(1282)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示