SpringMVC下二维码的生成并以流输出的方式展示
程序员文章站
2022-03-22 20:51:28
...
最近工作中遇到一个需求,需要为指定器械包生成二维码,然后通过PDA扫描二维码即可获取器械的相关信息.
需求实现后,在此作个简单的总结.
基于SpringMVC的maven项目
1.引入二维码生成必要的依赖
<!-- https://mvnrepository.com/artifact/com.google.zxing/core -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.3.0</version>
</dependency>
2.创建一个二维码工具类QRCodeUtil,并写一个二维码生成的静态方法.
二维码生成的主要逻辑代码如下:
/**
* TODO
*
* @author ShangHai
* @date 2019/12/04 22:08
*/
public class QRCodeUtil {
/**
* 生成二维码图片并返回
* @param content 二维码存储的内容
* @param width 指定二维码的宽度
* @param height 指定二维码的高度
* @return
* @throws Exception
*/
public static BufferedImage createQrCodeImage(String content,int width,int height) throws Exception{
Hashtable hints = new Hashtable();
//指定纠错等级
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H);
hints.put(EncodeHintType.CHARACTER_SET, "utf-8");
//生成二维码矩阵
BitMatrix bitMatrix =
new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, width, height, hints);
//获取矩阵宽度、高度,生成二维码图片
BufferedImage image = new BufferedImage(bitMatrix.getWidth(),bitMatrix.getHeight(),BufferedImage.TYPE_INT_RGB);
for (int x = 0; x < width; x++) {
for (int y = 0; y < height; y++) {
image.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
}
}
return image;
}
}
3.创建一个条码控制器CodeController,并写一个调用二维码生成并用流输出的映射方法.
映射方法如下:
/**
* TODO
*
* @author ShangHai
* @date 2019/12/04 22:16
*/
@Controller
@RequestMapping(value= "/code")
public class CodeController {
/**
* 以输出流的方式输出得到的二维码
* @param content 二维码存储的信息
* @param response 响应对象
*/
@RequestMapping(value= "/getQrCode",produces = {"text/html;charset=utf-8"})
public void getQrCode(String content,HttpServletResponse response){
try {
//获取指定宽度、高度的二维码图片
BufferedImage image = QRCodeUtil.createQrCodeImage(content,300,300);
//将二维码图片以jpg类型,写入响应对象的字节输出流中
ImageIO.write(image,"jpg",response.getOutputStream());
} catch (Exception e) {
e.printStackTrace();
}
}
}
4.创建一个展示二维码的页面QRCode.jsp.并在CodeController中声明进入此页面的映射
页面内容如下:
<%--
Created by IntelliJ IDEA.
User: ShangHai
Date: 2019/12/04
Time: 22:20
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>QRCode</title>
</head>
<body>
<!-- GET请求发送参数:content(二维码存储的信息) -->
<img src="/code/getQrCode?content=shanghai" title="QRCode"
width="300px;" height="300px;" alt="QRCode Acquisition Failed">
</body>
</html>
进入QRCode.jsp页面的映射方法:
@RequestMapping(value= "/showQRCode")
public String codePage(){
return "QRCode";
}
5.启动服务器,通过浏览器输入地址测试二维码是否成功生成.
测试结果如图:
以上便是二维码生成及流输出展示的过程