springboot生成二维码的正确姿势-附视频附源码

2023-10-21 20:15:31 浏览数 (2)

<!--

  • @Author: JavaPub
  • @Date: 2023-10-07 19:36:06
  • @LastEditors: your name
  • @LastEditTime: 2023-10-21 19:20:43
  • @Description: Here is the JavaPub code base. Search JavaPub on the whole web.
  • @FilePath: JavaPub-Blogdocspostsspringbootspringboot生成二维码的正确姿势-附视频附源码.md -->

@toc

二维码的原理是什么,如何保证不重复?你有没有想过这样一件事,二维码是实现原理是什么?如何保证各个平台的二维码是唯一的?就算你的程序停止运行,但是你的二维码依然存在。设计上要保证唯一性,比如在物流等环境中扫码编程别人的二维码。

二维码是我们当今社会非常重要的一项技术,不论是我们在买菜,网购,停车等等,都需要扫码,几乎覆盖我们生产、生活的方方面面。

前言

你有没有想过这样一些问题:

二维码的原理是什么,如何保证不重复?保证各个平台的二维码是唯一

你有没有想过这样一件事,二维码是实现原理是什么?

就算你的程序停止运行,但是你的二维码依然存在。

设计上要保证唯一性,比如在物流等容易损坏的环境中,如何保证二维码的准确性?

初始化 SpringBoot 项目

https://start.aliyun.com

引入依赖

代码语言:html复制
        <!-- 引入二维码依赖 -->
        <dependency>
             <groupId>com.google.zxing</groupId>
             <artifactId>core</artifactId>
             <version>3.2.0</version>
        </dependency>
        <dependency>
             <groupId>com.google.zxing</groupId>
             <artifactId>javase</artifactId>
             <version>3.2.0</version>
        </dependency>

编码

编写工具类

QrCodeController1 工具类

代码语言:java复制
package cn.net.javapub.springbootqr.demos.web.controller;

import cn.net.javapub.springbootqr.demos.web.utils.QRCodeUtil1;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;

/**
 * 作者 JavaPub
 */
@Controller
//@Deprecated
public class QrCodeController1 {
	/**
     * 根据 url 生成 普通二维码
     */
    @RequestMapping(value = "/createCommonQRCode")
    public void createCommonQRCode(HttpServletResponse response,HttpServletRequest request) throws Exception {
        ServletOutputStream stream = null;
        try {
            stream = response.getOutputStream();
            String url = request.getParameter("url");
            //使用工具类生成二维码
            QRCodeUtil1.encode(url, stream);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            if (stream != null) {
                stream.flush();
                stream.close();
            }
        }
    }
 
    /**
     * 根据 url 生成 带有logo二维码
     */
    @RequestMapping(value = "/createLogoQRCode")
    public void createLogoQRCode(HttpServletResponse response,HttpServletRequest request) throws Exception {
        ServletOutputStream stream = null;
        try {
            stream = response.getOutputStream();
//            String logoPath = Thread.currentThread().getContextClassLoader().getResource("").getPath() 
//                      "templates"   File.separator  "logo-" UUID.randomUUID().toString().trim().replaceAll("-", "")  ".jpg";
            String logoPath = Thread.currentThread().getContextClassLoader().getResource("").getPath() 
                      "templates"   File.separator  "logo.jpg";
            String url = request.getParameter("url");
            //使用工具类生成二维码
            QRCodeUtil1.encode(url, logoPath, stream, true);
        } catch (Exception e) {
            e.getStackTrace();
        } finally {
            if (stream != null) {
                stream.flush();
                stream.close();
            }
        }
    }
}

生成二维码

附带功能化:

  • 离线可以扫描二维码
  • 二维码可以带logo

资源共享

视频:https://www.bilibili.com/video/BV1cw411w7Rk/

源码:https://github.com/Rodert/springboot-qr/

0 人点赞