好久没有更新博客,最近项目里有个功能是需要生成二维码,所以记录一下这个功能。
之前有用过自己写的二维码工具类结合谷歌的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;
}
}
做完这些之后,就可以调用此接口生成相应的二维码了,我这个做的比较简单,二维码生成部分我删减了代码逻辑,就用的最简单的字符串,有具体需求的,可以根据具体的需求进行设计修改。
前端可以根据该接口进行调用,我做的测试结果如下图:
大家可以扫描这个二维码,内容就是123456
相应的hutool的具体的API,可以参考hutoolAPI,里面会有比较详细的方法介绍,也可以参考hutool的二维码工具类文档。
顺便说一声,Hutool做的是真的不错,集成了很多的便捷的工具,做项目的时候添加这个依赖之后,很多小的功能可以直接调用hutool里面实现好的直接使用,还是很不错的。
如果觉得hutool是封装过的方法,想自己写一个二维码的工具类,可以参考这一篇文章,个人觉得写的还行,不过里面也有一些小问题,可以自己调试。