欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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.启动服务器,通过浏览器输入地址测试二维码是否成功生成.

测试结果如图:

SpringMVC下二维码的生成并以流输出的方式展示

以上便是二维码生成及流输出展示的过程