首页 > 编程语言 >好用的java工具类整理

好用的java工具类整理

时间:2024-12-18 22:57:54浏览次数:5  
标签:java sysMenuList description List 验证码 sysMenu 整理 好用 Schema

一、封装树形菜单数据

表结构必须有parentId,以便于实现无限级分类,如下:

实体类

@Schema(description = "系统菜单实体类")
@Data
public class SysMenu extends BaseEntity {

	@Schema(description = "父节点id")
	private Long parentId;

	@Schema(description = "节点标题")
	private String title;

	@Schema(description = "组件名称")
	private String component;

	@Schema(description = "排序值")
	private Integer sortValue;

	@Schema(description = "状态(0:禁止,1:正常)")
	private Integer status;

	// 下级列表
	@Schema(description = "子节点")
	private List<SysMenu> children;

}

java中使用:

 -------controller-----

List<SysMenu> list = sysMenuService.findNodes();

-----------service-----

@Override
    public List<SysMenu> findNodes() {
        //1 查询所有菜单,返回list集合
        List<SysMenu> sysMenuList = sysMenuMapper.findAll();
        if(CollectionUtils.isEmpty(sysMenuList)) {
            return null;
        }

        //2 调用工具类的方法,把返回list集合封装要求数据格式
        List<SysMenu> treeList = MenuHelper.buildTree(sysMenuList);
        return treeList;
    }
---------util----------

//封装树形菜单数据
public class MenuHelper {

    //递归实现封装过程
    public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {
        //sysMenuList所有菜单集合
        //创建list集合,用于封装最终的数据
        List<SysMenu> trees = new ArrayList<>();
        //遍历所有菜单集合
        for(SysMenu sysMenu:sysMenuList) {
            //找到递归操作入口,第一层的菜单
            //条件: parent_id=0
            if(sysMenu.getParentId().longValue()==0) {
                //根据第一层,找下层数据,使用递归完成
                //写方法实现找下层过程,
                // 方法里面传递两个参数:第一个参数当前第一层菜单,第二个参数是所有菜单集合
                trees.add(findChildren(sysMenu,sysMenuList));
            }
        }
        return trees;
    }

    //递归查找下层菜单
    public static SysMenu findChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {
        // SysMenu有属性 private List<SysMenu> children;封装下一层数据
        sysMenu.setChildren(new ArrayList<>());
        //递归查询
        // sysMenu的id值 和  sysMenuList中parentId相同
        for(SysMenu it:sysMenuList) {
            //判断id 和  parentid是否相同
            if(sysMenu.getId().longValue() == it.getParentId().longValue()) {
                // it就是下层数据,进行封装
                sysMenu.getChildren().add(findChildren(it,sysMenuList));
            }
        }
        return sysMenu;
    }
}

二、获取图片验证码

首先导入Hutool库

然后使用CaptchaUtil

具体用法举例:

      //生成图片验证码
    @Override
    public ValidateCodeVo generateValidateCode() {
        //1 通过工具生成图片验证码
        //hutool
        //int width, int height, int codeCount, int circleCount
        CircleCaptcha circleCaptcha = CaptchaUtil.createCircleCaptcha(150, 48, 4, 2);
        String codeValue = circleCaptcha.getCode();//4位验证码值 
        String imageBase64 = circleCaptcha.getImageBase64(); //返回图片验证码,base64编码

        //2 把验证码存储到redis里面,设置redis的key: uuid   redis的value :验证码值
        //设置过期时间
        String key = UUID.randomUUID().toString().replaceAll("-","");
        redisTemplate.opsForValue().set("user:validate"+key,
                                        codeValue,
                                        5,
                                        TimeUnit.MINUTES);

        //3 返回ValidateCodeVo对象
        ValidateCodeVo validateCodeVo = new ValidateCodeVo();
        validateCodeVo.setCodeKey(key); //redis存储数据key,返回给前端接收,后续登录的时候前端拿着key给后端,后端拿着key去redis中查询验证码是否准确
        validateCodeVo.setCodeValue("data:image/png;base64," + imageBase64);

        return validateCodeVo;
    }
       这里返回的validateCodeVo
    @Data
    @Schema(description = "验证码响应结果实体类")
    public class ValidateCodeVo {

        @Schema(description = "验证码key")
        private String codeKey ;        // 验证码的key

        @Schema(description = "验证码value")
        private String codeValue ;      // 图片验证码对应的字符串数据

    }
    --前端调用接收--
          refreshCaptcha: async () => {
          const { data } = await GetValidateCode() ;
          state.model.codeKey = data.codeKey
          state.captchaSrc = data.codeValue
      },

标签:java,sysMenuList,description,List,验证码,sysMenu,整理,好用,Schema
From: https://blog.csdn.net/wuguanghui1/article/details/144390907

相关文章

  • javaweb知识点总结
    HTML1.HTML是一种超文本标记语言,可存储文字,图片,视频等等2.HTML依靠浏览器解析运行3.HTML有自己的预定义标签4.HTML由三部分组成,遵循W3C标准结构:HTML表现:CSS行为:JavaScript基础知识:1.颜色标签文字2.HTML文档不区分大小写3.HTMl语法松散#有时语法错误,功能仍正常基础......
  • 基于java的SpringBoot/SSM+Vue+uniapp的大学校园防疫与服务系统的详细设计和实现(源码
    文章目录前言详细视频演示具体实现截图技术栈后端框架SpringBoot前端框架Vue持久层框架MyBaitsPlus系统测试系统测试目的系统功能测试系统测试结论为什么选择我代码参考数据库参考源码获取前言......
  • 免费好用量化接口:A股实时和历史分钟行情接口(四)
    市面上大部分做量化的还是基于分钟级别做的策略,无论是均线、还是各种指标和形态,基于分钟级别都是比较合适的周期。历史数据和实时行情接口中分钟级别也是很多人最需要的,今天分享的是A股分钟级别的实时和历史行情接口:首先还是先安装python依赖库:安装python依赖库通过pip安装:......
  • JAVA无人共享24小时自助洗车扫码洗车系统源码支持小程序
    JAVA无人共享24小时自助洗车扫码洗车系统源码支持小程序在当今快节奏的生活中,自助洗车服务以其高效、便捷的特点逐渐受到广大车主的青睐。为满足这一市场需求,我们精心打造了一款JAVA无人共享24小时自助洗车扫码洗车系统,其源码全面支持小程序接入,不仅极大地提升了用户体验,还为......
  • JAVA数字人创作文案视频链接提取数字人源码小程序+公众号+APP+H5
    JAVA数字人创作文案提取与生成系统:全能型内容创作与运营解决方案在当今数字化内容井喷的时代,如何高效、创新地生产并传播内容,成为了众多内容创作者、商户乃至企业面临的重要课题。我们的JAVA数字人创作文案提取与生成系统,正是基于这一市场需求,集成了文案提取、文案生成、视频......
  • JAVA无人共享24小时自助洗车扫码洗车系统源码支持小程序
    JAVA无人共享24小时自助洗车扫码洗车系统源码支持小程序在当今快节奏的生活中,自助洗车服务以其高效、便捷的特点逐渐受到广大车主的青睐。为满足这一市场需求,我们精心打造了一款JAVA无人共享24小时自助洗车扫码洗车系统,其源码全面支持小程序接入,不仅极大地提升了用户体验,还为......
  • 【老白学 Java】集合应用 - 卡拉 OK(一)
    集合应用-卡拉OK(一)文章来源:《HeadFirstJava》修炼感悟。最近老白准备研究一下Java集合和泛型的相关知识。为了增加学习乐趣,老白通过一些小案例来了解集合类的基本用法。本篇文章打算编写一个简单的曲目处理程序,其中使用到了类库中的排序方法。一、显示点唱曲目......
  • Java框架 —— SpringMVC
    MVC分层MVC:ModelViewController(模型-视图-控制器)模型(Model):处理数据逻辑的部分;在web应用中,他通常包含与数据库交互的代码,负责数据的存储、检索和更新视图(View):将数据渲染为用户界面,视图只展示页面,不包含业务逻辑控制器(Controller):模型和视图之间的协调者,它接收用户的......
  • java中的FileReader和FileWriter类
    一、介绍使用FileOutputStream类向文件中写入数据与使用FileInputStream类从文件中将内容读出来,都存在一点不足,即这两个类都只提供了对字节或字节数组的读取方法。由于汉字在文件中占用两个字节,如果使用字节流,读取不好可能会出现乱码现象,此时采用字节流Reader或Writer类即可避......
  • Java核心技术卷1 第四章选读
    前言本文内容选自Java核心技术卷1第10版,感兴趣的小伙伴可以自行阅读原书,以下内容为本人学习后摘取的片段与大家分享。正文4.10类设计技巧我们不会面面俱到,也不希望过于沉闷,所以这一章结束之前,简单地介绍几点技巧。应用这些技巧可以使得设计出来的类更具有OOP的专业水准。......