RUOYI-VUE-PRO之接口幂等防重提交设计源码分析
声明:优质文章第一点思路总结
·
声明:
官方文档
接口的幂等性设计文章
优化点:
- 方法执行之后删除对应的key(待开发)
源码分析
业务代码
@GetMapping("/page")
@ApiOperation("获得用户分页列表")
@PreAuthorize("@ss.hasPermission('system:user:list')")
@Idempotent(timeout = 10,message = "获得用户分页列表,重复查询!")
public CommonResult<PageResult<UserPageItemRespVO>> getUserPage(@Valid UserPageReqVO reqVO) {
// 获得用户分页列表
PageResult<AdminUserDO> pageResult = userService.getUserPage(reqVO);
if (CollUtil.isEmpty(pageResult.getList())) {
return success(new PageResult<>(pageResult.getTotal())); // 返回空
}
// 获得拼接需要的数据
Collection<Long> deptIds = convertList(pageResult.getList(), AdminUserDO::getDeptId);
Map<Long, DeptDO> deptMap = deptService.getDeptMap(deptIds);
// 拼接结果返回
List<UserPageItemRespVO> userList = new ArrayList<>(pageResult.getList().size());
pageResult.getList().forEach(user -> {
UserPageItemRespVO respVO = UserConvert.INSTANCE.convert(user);
respVO.setDept(UserConvert.INSTANCE.convert(deptMap.get(user.getDeptId())));
userList.add(respVO);
});
return success(new PageResult<>(userList, pageResult.getTotal()));
}
具体的代码分析我就不一一分析 。我们就说一下他设计的精妙之处(可能我没这么写过,感觉他设计的非常好)官方文档种有具体的实现原理和源码分析
第一点
2、切面类
非常棒的写法就是判断对象是不是null
// 断言一个对象是不是null
Assert.notNull(keyResolver, "找不到对应的 IdempotentKeyResolver");
思路总结
更多推荐
所有评论(0)