✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨

这里有:

  • 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
  • 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
  • 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!

 点击直达→ 盹猫猫的个人小站 
来逛逛吧,说不定能挖到你正在找的技术宝藏哦~

目录

前言

二维码的起源

⭐ 环境准备

Pom依赖

⭐ 代码步骤

普通二维码

带Logo二维码

❓ 疑问解答

总结


欢迎来到 盹猫(>^ω^<)的博客

本篇文章主要介绍了

[SpringBoot生成二维码]
❤博主广交技术好友,喜欢文章的可以关注一下❤

前言

        二维码在生活中已经很常见了, 常用于快速的登录,邀请等操作,其本质是构建了可被扫码的图形化的快速分享通道,二维码可以由前端代码生成,也可以进行后端生成,所以这很容易打架!

当然如果你说过你是全栈工程师,那就只能是你了(老板内心偷乐). 

本篇文章就是记录由前端和后端生成二维码的方式,算了还是先记录后端吧.(这算不算挑起战争)

二维码的起源

        20 世纪 50 年代,为解决收银员手写记录商品售卖情况导致的结账效率慢的问题,日本人(该死)发明了条形码。条形码通过黑白相间、宽度不同的线条组合来存储信息,但由于长度有限,存储的信息很快不能满足社会需求,所以就有了二维码(二维码=记录更多信息的条形码).

⭐ 环境准备

名称版本
springboot3.5.6
jdk21
hutool-all5.8.35
zxing-core3.5.2

除了基础的springboot和jdk外,我们需要hutool-all(糊涂)包帮助快速生成二维码,而生成二维码的核心是用到了zxing-core这个包(一个套一个).

Pom依赖

    
        
            org.springframework.boot
            spring-boot-starter-web
            
                
                    org.springframework.boot
                    spring-boot-starter-logging
                
            
        
        
            com.google.zxing
            core
            3.5.2
        
        
            cn.hutool
            hutool-all
            5.8.35
        
    

⭐ 代码步骤

生成二维码主要用到QrCodeUtil下的generate方法:

QrCodeUtil.generate(内容, 宽度, 高度,格式,目标);

内容: 可以是文本,超链接等

宽度和高度: 就是二维码图片的宽度和高度

格式: 生成的图片格式

目标:输出到哪里,可以是文件或者输出流.

普通二维码

@GetMapping("/hutool/qrcode")
public void generateQRCodeByHutool(
            @RequestParam String content,
            HttpServletResponse response
) throws Exception {
        //设置响应格式
        response.setContentType("image/png");
        //获取响应的输出流
        OutputStream os = response.getOutputStream();
        // 生成二维码并写入输出流
        QrCodeUtil.generate(content, 300, 300,"png",os);
}

如上述代码即输出一个普通的二维码宽度和高度为300,格式为png,输出到响应的输出流中.这样浏览器访问 /hutool/qrcode?content=内容  即可将内容输出为二维码图片.

带Logo二维码

除了宽度和高度外仍然有很多定义的属性,如logo,背景色等对二维码设置的属性,这样放在一个方法中就显得属性值太多了,所以定义了一个QrConfig属性进行配置:

QrCodeUtil.generate(内容, 配置类, 格式, 目标);

如下代码中,可以为二维码添加自定义的logo, logo是否为圆角等配置信息:

    @GetMapping("/hutool/qrcode/custom")
    public void generateCustomQRCode(
            @RequestParam String content,
            HttpServletResponse response
    ) throws Exception {
        response.setContentType("image/png");
        OutputStream os = response.getOutputStream();
        // 配置二维码参数
        QrConfig config = new QrConfig(500, 500);
        config.setErrorCorrection(ErrorCorrectionLevel.L); // 容错等级
        config.setImg("/home/seaua/Desktop/logo.png"); // 加入logo(路径或InputStream)
        //圆角
        config.setRound(0.2);
        //间隔 二维码到边的留白
        config.setMargin(2);
        // 生成并输出
        QrCodeUtil.generate(content, config, "png", os);
    }

因为二维码容易被禁,所以这里就不上传效果了,自己动手试一试吧!

❓ 疑问解答

有很多二维码带有时效性(一段时间不能用了),如何生成带有时效性的二维码?

  时效性二维码实际是时效性链接的生成和验证,我们可以生成的链接中添加过期的时间戳,并且对(时间戳+盐)进行MD5加密同样添加到链接中,这样用户扫描后,跳转到我们定义的链接后即可通过对(时间戳+盐)进行校验,同时与当前时间进行比较,就保证了二维码链接的时效性.

    public String generateQrCodeUrl(Long comboId,Long expireTime){
        //生成MD5加密串
        String sign = getMd5Sign(comboId,expireTime);
        //返回链接
        return redirect + "?comboId=" +
                comboId +
                "&expire=" +
                expireTime +
                "&sign=" +
                sign;
    }
    public String getMd5Sign(Long comboId,Long expireTime){
        //进行自定义格式签名,comboId为业务数据.
        return MD5.encode(comboId+":"+expireTime+":"+secret);
    }
    public Long getExpire(){
        //获取当前时间戳
        long timeStamp = System.currentTimeMillis();
        //设置过期时间
        return timeStamp + expire * 1000;
    }

总结

        通过集成hutool依赖,可以很方便的在后端生成二维码,同时自定义二维码的多种属性,如果需要追求二维码的时效性,不要忘了对链接加签名验证哦!

上面就是所有文章内容了,如果内容对你有帮助,麻烦留一个赞和收藏⭐支持一下!


如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链

感谢您的关注和收藏!!!!!!

posted on 2025-10-14 22:40  lxjshuju  阅读(13)  评论(0)    收藏  举报