GET请求数据量大造成的问题
2024-10-21 12:53:02
在实际的开发过程中,我们偶尔或者遇到过要导出列表中所有的数据。假设列表中有十万条数据,那么导出所有,意味着要大批量的走查询接口,通常我们的后台的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();
}
}
最新文章
- python基础——使用元类
- C++ 基础 const放在函数末尾的意思
- iOS开发---集成ShareSDK实现第三方登录、分享、关注等功能。
- Android实例-调用系统APP(XE10+小米2)
- Android Socket 相关
- centos SSH配置详解
- (转载)Javascript 进阶 作用域 作用域链
- 网页JavaScript1
- Bother
- 戏说云计算之PaaS,IaaS,SaaS【转载】
- JSONObject简介(2)
- upload 简单的封装
- Java与算法之(5) - 老鼠走迷宫(深度优先算法)
- Django REST Framework API Guide 06
- [Objective-C语言教程]数组(14)
- 表单,table的css
- git根据用户过滤提交记录
- BZOJ 1150 - 数据备份Backup - [小顶堆][CTSC2007]
- Android 开发第三步-问题解析
- SAP查询TABLE对应的文本表