声明:

官方文档

接口的幂等性设计文章

优质文章

优化点:

  • 方法执行之后删除对应的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");

思路总结

在这里插入图片描述

Logo

快速构建 Web 应用程序

更多推荐