好久没有更新博客,最近项目里有个功能是需要生成二维码,所以记录一下这个功能。

之前有用过自己写的二维码工具类结合谷歌的com.google.zxing版本3.3.3,自己写的一个,因为创建的文件比较多,后来发现项目中Hutool这个工具类中,已经做好了这块的集成实现,可以很轻松的调用就可以了,所以今天就简单讲一下具体的流程。

首先要在pom.xml中添加依赖,代码如下:

com.google.zxing的依赖:

<dependency>
	<groupId>com.google.zxing</groupId>
	<artifactId>core</artifactId>
	<version>3.3.3</version>
</dependency>

Hutool的依赖:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.4</version>
</dependency>

然后创建controller,这个接口提供给外部调用,我的调用形式是带code生成相应的二维码:

public class QRCodeController extends BaseController{

    @RequestMapping("getQRCode")
    public void getQRCode(String code , HttpServletResponse response , Map<String,Object> map){
        try {
            // 设置响应流信息
            response.setContentType("image/jpg");
            response.setHeader("Pragma", "no-cache");
            response.setHeader("Cache-Control", "no-cache");
            response.setDateHeader("Expires", 0);

            OutputStream stream = response.getOutputStream();

            //获取一个二维码图片
            BufferedImage bi = new QRCodeService().GetQRCode(code);//调用层

            //以流的形式输出到前端
            ImageIO.write(bi, "jpg", stream);


        } catch (Exception e) {
            e.printStackTrace();
        }
    }

}

在controller的getQRCode这个接口中调用server层的方法GetQRRCode,代码如下:

public class QRCodeService {

    Logger logger = LoggerFactory.getLogger(QRCodeService.class);

    public BufferedImage GetQRCode(String code) {
        BufferedImage bi = null;
        try{

            //调用接口生成二维码
            //获取一个二维码图片
            //code只是我前端传递的一个数据,这块可以根据项目具体情况设计,此处可以是url也可以是别的一些需要设置的内容
            bi = QrCodeUtil.generate(code,200,200);//这块就是调用hutool工具类的方法生成二维码图片

        } catch (Exception e) {
            logger.error("获取二维码异常", e);
        }
        return bi;
    }
}

做完这些之后,就可以调用此接口生成相应的二维码了,我这个做的比较简单,二维码生成部分我删减了代码逻辑,就用的最简单的字符串,有具体需求的,可以根据具体的需求进行设计修改。

前端可以根据该接口进行调用,我做的测试结果如下图:

后端执行输出展示在前端 python 后端调用前端接口_二维码接口

大家可以扫描这个二维码,内容就是123456

相应的hutool的具体的API,可以参考hutoolAPI,里面会有比较详细的方法介绍,也可以参考hutool的二维码工具类文档。

顺便说一声,Hutool做的是真的不错,集成了很多的便捷的工具,做项目的时候添加这个依赖之后,很多小的功能可以直接调用hutool里面实现好的直接使用,还是很不错的。

如果觉得hutool是封装过的方法,想自己写一个二维码的工具类,可以参考这一篇文章,个人觉得写的还行,不过里面也有一些小问题,可以自己调试。