在实际的开发过程中,我们偶尔或者遇到过要导出列表中所有的数据。假设列表中有十万条数据,那么导出所有,意味着要大批量的走查询接口,通常我们的后台的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();
}
}

最新文章

  1. python基础——使用元类
  2. C++ 基础 const放在函数末尾的意思
  3. iOS开发---集成ShareSDK实现第三方登录、分享、关注等功能。
  4. Android实例-调用系统APP(XE10+小米2)
  5. Android Socket 相关
  6. centos SSH配置详解
  7. (转载)Javascript 进阶 作用域 作用域链
  8. 网页JavaScript1
  9. Bother
  10. 戏说云计算之PaaS,IaaS,SaaS【转载】
  11. JSONObject简介(2)
  12. upload 简单的封装
  13. Java与算法之(5) - 老鼠走迷宫(深度优先算法)
  14. Django REST Framework API Guide 06
  15. [Objective-C语言教程]数组(14)
  16. 表单,table的css
  17. git根据用户过滤提交记录
  18. BZOJ 1150 - 数据备份Backup - [小顶堆][CTSC2007]
  19. Android 开发第三步-问题解析
  20. SAP查询TABLE对应的文本表

热门文章

  1. 爬虫Charles安装破解使用教程
  2. FineUI通过js事件条用后台方法实现弹窗
  3. 题解 P7623 [AHOI2021初中组] 收衣服
  4. keep-alive详解
  5. Linux:find 指令的选项 +n、-n、n
  6. jquery获得标签元素
  7. 【11】java之抽象类
  8. Windows 远程桌面连接ip查询
  9. java struts2框架漏洞合集
  10. Dockerfile的指令和编写