• Spring Boot Web 生成并显示二维码


    Spring Boot Web 生成并显示二维码

    本 Spring Boot 教程将逐步向您展示如何实现 Spring Boot Web 应用程序,该应用程序从用户输入生成 QR 码并通过网页显示 QR 码。

    目录

    Spring Boot Web 生成并显示二维码

    1.创建新的 Spring Boot Web 项目

    2.将 ZXing Core 和 ZXing Java SE Extensions 库添加到 Spring Boot 项目中

    3.编写二维码服务接口和类

    4.编写控制器类和 HTML 视图

    5.完成源代码并运行 Web 应用程序


    1.创建新的 Spring Boot Web 项目

    打开 IntelliJ IDEA,选择菜单 File > New > Project。

    在 New Project 对话框中,选择 Spring Initializr 并单击 Next 按钮。

    在 Spring initializr Project Settings 对话框中,输入新的项目信息,如下所示,然后单击 Next 按钮。

    • group:dev.simplesolution
    • artifact:spring-boot-generate-display-qr-code
    • version:1.0.0
    • Name:spring-boot-generate-display-qr-code
    • description:Spring Boot Web 生成并显示二维码
    • package:dev.simplesolution.generateqr

    在 Dependencies 对话框中,选择下面的依赖项,然后单击 Next 按钮。

    • Spring Web
    • Thymeleaf

    为您的项目选择位置,然后单击 Finish 按钮以创建新的 Spring Boot 项目。

    您还可以使用位于start.spring.io的 Spring Initializr 在线工具创建新的 Spring Boot 项目,如下图所示。

    2.将 ZXing Core 和 ZXing Java SE Extensions 库添加到 Spring Boot 项目中

    为了生成二维码图像,我们使用 ZXing 库。要在 Maven 项目中使用 ZXing 库,请将以下依赖项添加到 pom.xml 文件中。

    1. <dependency>
    2. <groupId>com.google.zxing</groupId>
    3. <artifactId>core</artifactId>
    4. <version>3.4.1</version>
    5. </dependency>
    6. <dependency>
    7. <groupId>com.google.zxing</groupId>
    8. <artifactId>javase</artifactId>
    9. <version>3.4.1</version>
    10. </dependency>

    完整的 pom.xml 如下所示。

    1. "1.0" encoding="UTF-8"?>
    2. "http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    3. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    4. 4.0.0
    5. org.springframework.boot
    6. spring-boot-starter-parent
    7. 2.6.1
    8. dev.simplesolution
    9. spring-boot-generate-display-qr-code
    10. 1.0.0
    11. spring-boot-generate-display-qr-code
    12. Spring Boot Web Generate and Display QR Code
    13. 1.8
    14. org.springframework.boot
    15. spring-boot-starter-thymeleaf
    16. org.springframework.boot
    17. spring-boot-starter-web
    18. com.google.zxing
    19. core
    20. 3.4.1
    21. com.google.zxing
    22. javase
    23. 3.4.1
    24. org.springframework.boot
    25. spring-boot-starter-test
    26. test
    27. org.springframework.boot
    28. spring-boot-maven-plugin

    如果您使用的是 Gradle,请将以下依赖项添加到 build.gradle 文件中。

    1. implementation group: 'com.google.zxing', name: 'core', version: '3.4.1'
    2. implementation group: 'com.google.zxing', name: 'javase', version: '3.4.1'

    3.编写二维码服务接口和类

    在这一步,我们实现服务类来生成 QR 图像并将 QR 图像作为字节数组返回。

    创建一个名为 dev.simplesolution.generateqr.service 的新包并添加新接口 QRCodeService,如下所示。

    src/main/java/dev/simplesolution/generateqr/service/QRCodeService.java

    1. package dev.simplesolution.generateqr.service;
    2. public interface QRCodeService {
    3. byte[] generateQRCode(String qrContent, int width, int height);
    4. }

    创建一个名为 dev.simplesolution.generateqr.service.impl 的新包,并按照以下代码实现一个名为 QRCodeServiceImpl 的类。

    src/main/java/dev/simplesolution/generateqr/service/impl/QRCodeServiceImpl.java

    1. package dev.simplesolution.generateqr.service.impl;
    2. import com.google.zxing.BarcodeFormat;
    3. import com.google.zxing.WriterException;
    4. import com.google.zxing.client.j2se.MatrixToImageWriter;
    5. import com.google.zxing.common.BitMatrix;
    6. import com.google.zxing.qrcode.QRCodeWriter;
    7. import dev.simplesolution.generateqr.service.QRCodeService;
    8. import org.slf4j.Logger;
    9. import org.slf4j.LoggerFactory;
    10. import org.springframework.stereotype.Service;
    11. import java.io.ByteArrayOutputStream;
    12. import java.io.IOException;
    13. @Service
    14. public class QRCodeServiceImpl implements QRCodeService {
    15. private Logger logger = LoggerFactory.getLogger(QRCodeServiceImpl.class);
    16. @Override
    17. public byte[] generateQRCode(String qrContent, int width, int height) {
    18. try {
    19. QRCodeWriter qrCodeWriter = new QRCodeWriter();
    20. BitMatrix bitMatrix = qrCodeWriter.encode(qrContent, BarcodeFormat.QR_CODE, width, height);
    21. ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
    22. MatrixToImageWriter.writeToStream(bitMatrix, "PNG", byteArrayOutputStream);
    23. return byteArrayOutputStream.toByteArray();
    24. } catch (WriterException e) {
    25. logger.error(e.getMessage(), e);
    26. } catch (IOException e) {
    27. logger.error(e.getMessage(), e);
    28. }
    29. return null;
    30. }
    31. }


     

    4.编写控制器类和 HTML 视图

    在这一步中,我们实现了一个新的 Controller 类,它公开了 3 个端点。

    • 显示表单的索引端点允许用户输入内容来生成二维码。
    • 显示 QR 码端点以显示 HTML 页面,其中包含表示生成的 QR 码图像的 img 标记。
    • 生成二维码端点接收文本作为二维码内容并返回二维码图像。

    添加一个名为 dev.simplesolution.generateqr.controller 的新 Java 包,并按照以下 Java 代码实现 QRCodeController 类。

    src/main/java/dev/simplesolution/generateqr/controller/QRCodeController.java

    1. package dev.simplesolution.generateqr.controller;
    2. import dev.simplesolution.generateqr.service.QRCodeService;
    3. import org.springframework.beans.factory.annotation.Autowired;
    4. import org.springframework.stereotype.Controller;
    5. import org.springframework.ui.Model;
    6. import org.springframework.web.bind.annotation.GetMapping;
    7. import org.springframework.web.bind.annotation.PostMapping;
    8. import org.springframework.web.bind.annotation.RequestMapping;
    9. import javax.servlet.http.HttpServletResponse;
    10. import java.io.IOException;
    11. import java.io.OutputStream;
    12. @Controller
    13. public class QRCodeController {
    14. @Autowired
    15. private QRCodeService qrCodeService;
    16. @RequestMapping("/")
    17. public String index() {
    18. return "index";
    19. }
    20. @PostMapping("/showQRCode")
    21. public String showQRCode(String qrContent, Model model) {
    22. model.addAttribute("qrCodeContent", "/generateQRCode?qrContent=" + qrContent);
    23. return "show-qr-code";
    24. }
    25. @GetMapping("/generateQRCode")
    26. public void generateQRCode(String qrContent, HttpServletResponse response) throws IOException {
    27. response.setContentType("image/png");
    28. byte[] qrCode = qrCodeService.generateQRCode(qrContent, 500, 500);
    29. OutputStream outputStream = response.getOutputStream();
    30. outputStream.write(qrCode);
    31. }
    32. }


     

    下一步我们将下面的 HTML 视图添加到资源/模板目录,如下所示。

    • index.html 显示允许用户输入内容生成二维码的索引页面。
    • show-qr-code.html 显示带有 img 标签的二维码。

    src/main/resources/templates/index.html
     

    1. <html xmlns:th="https://www.thymeleaf.org">
    2. <head>
    3. <title>Spring Boot Web Generate QR Codetitle>
    4. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    5. head>
    6. <body>
    7. <div class="container">
    8. <h1>Generate QR Codeh1>
    9. <form method="POST" enctype="multipart/form-data" action="/showQRCode">
    10. <div class="mb-3">
    11. <label for="qrContent" class="form-label">Enter your content to generate QR codelabel>
    12. <input type="text" class="form-control form-control-lg" id="qrContent" name="qrContent" required>
    13. div>
    14. <div class="mb-3">
    15. <button type="submit" class="btn btn-primary">Generate QR Codebutton>
    16. div>
    17. form>
    18. div>
    19. body>
    20. html>

    src/main/resources/templates/show-qr-code.html

    1. <html xmlns:th="https://www.thymeleaf.org">
    2. <head>
    3. <title>Spring Boot Web Generate QR Codetitle>
    4. <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/css/bootstrap.min.css" rel="stylesheet">
    5. head>
    6. <body>
    7. <div class="container">
    8. <a href="/" class="btn btn-link">Back to homea>
    9. <br />
    10. <img th:src="${qrCodeContent}" />
    11. div>
    12. body>
    13. html>

    5.完成源代码并运行 Web 应用程序

    最后我们得到了完整的应用程序,其源代码结构如下。

    运行应用程序并在浏览器上打开http://localhost:8080/以访问如下网页。

    在文本字段中输入您要生成二维码的内容,然后点击生成二维码生成二维码图像,如下所示。

     源代码下载地址:SpringBootWeb生成并显示二维码-Java文档类资源-CSDN下载

    如果觉得文章不错,可以点赞,关注一下博主啦~  感谢~

  • 相关阅读:
    事务之基本概念
    什么是数据结构?什么是算法?怎么学习数据结构与算法?
    基于 LLM 的知识图谱另类实践
    部署ai画图服务器
    李阳:京东零售OLAP平台建设和场景实践
    从源码角度看React-Hydrate原理
    正则表达式中的*?与*的区别
    Linux命令
    【多线程】Timer任务定时器实现与盲等原子性问题的解决
    机器学习 —— 朴素贝叶斯
  • 原文地址:https://blog.csdn.net/qq_20173195/article/details/126589009