SpringBoot快速生成二维码
✨重磅!盹猫的个人小站正式上线啦~诚邀各位技术大佬前来探秘!✨
这里有:
- 硬核技术干货:编程技巧、开发经验、踩坑指南,带你解锁技术新姿势!
- 趣味开发日常:代码背后的脑洞故事、工具测评,让技术圈不再枯燥~
- 独家资源分享:开源项目、学习资料包,助你打怪升级快人一步!
👉 点击直达→ 盹猫猫的个人小站 👈
🌟 来逛逛吧,说不定能挖到你正在找的技术宝藏哦~
目录
🎮 前言
📚 二维码的起源
⭐ 环境准备
🍄 Pom依赖
⭐ 代码步骤
🌿 普通二维码
🌿 带Logo二维码
❓ 疑问解答
📦 总结
欢迎来到 盹猫(>^ω^<)的博客
本篇文章主要介绍了
[SpringBoot生成二维码]
❤博主广交技术好友,喜欢文章的可以关注一下❤
🎮 前言
二维码在生活中已经很常见了, 常用于快速的登录,邀请等操作,其本质是构建了可被扫码的图形化的快速分享通道,二维码可以由前端代码生成,也可以进行后端生成,所以这很容易打架!😂
当然如果你说过你是全栈工程师,那就只能是你了(老板内心偷乐).
本篇文章就是记录由前端和后端生成二维码的方式,算了还是先记录后端吧.(这算不算挑起战争🤣)
📚 二维码的起源
20 世纪 50 年代,为解决收银员手写记录商品售卖情况导致的结账效率慢的问题,日本人(该死)发明了条形码。条形码通过黑白相间、宽度不同的线条组合来存储信息,但由于长度有限,存储的信息很快不能满足社会需求,所以就有了二维码(二维码=记录更多信息的条形码).
⭐ 环境准备
名称 | 版本 |
---|---|
springboot | 3.5.6 |
jdk | 21 |
hutool-all | 5.8.35 |
zxing-core | 3.5.2 |
除了基础的springboot和jdk外,我们需要hutool-all(糊涂)包帮助快速生成二维码,而生成二维码的核心是用到了zxing-core这个包(一个套一个).
🍄 Pom依赖
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><exclusions><exclusion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-logging</artifactId></exclusion></exclusions></dependency><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.2</version> </dependency><dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.8.35</version></dependency></dependencies>
⭐ 代码步骤
生成二维码主要用到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依赖,可以很方便的在后端生成二维码,同时自定义二维码的多种属性,如果需要追求二维码的时效性,不要忘了对链接加签名验证哦!
上面就是所有文章内容了,如果内容对你有帮助,麻烦留一个赞👍和收藏⭐支持一下!
如果你对区块链内容感兴趣可以查看我的专栏:小试牛刀-区块链
感谢您的关注和收藏!!!!!!