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

最近工作中遇到一个需求,需要为指定器械包生成二维码,然后通过PDA扫描二维码即可获取器械的相关信息.

需求实现后,在此作个简单的总结.

基于SpringMVC的maven项目

1.引入二维码生成必要的依赖



  com.google.zxing
  core
  3.3.0

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" %>


    QRCode




QRCode Acquisition Failed


进入QRCode.jsp页面的映射方法:

@RequestMapping(value= "/showQRCode")
public String codePage(){
    return "QRCode";
}

5.启动服务器,通过浏览器输入地址测试二维码是否成功生成.

测试结果如图:

SpringMVC实现二维码的生成并以流输出的方式展示_第1张图片

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

你可能感兴趣的:(Java实现二维码的生成)