news 2026/7/6 20:06:48

SpringBoot3实现高效物料二维码管理

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
SpringBoot3实现高效物料二维码管理

前言

在当今数字化的浪潮中,二维码的身影无处不在,它已成为连接线上线下信息的关键纽带。在物料管理领域,通过二维码对物料进行标识和追踪,能极大地提升管理效率与准确性。本文将详细阐述如何在 Spring Boot 3 项目中实现物料管理二维码生成的功能,带领各位开发者一步步搭建起这一实用的功能模块。

搭建 Spring Boot 3 项目基础

(一)创建 Spring Boot 项目

我们借助 Spring Initializr 来创建项目。打开 Spring Initializr 网站,在项目创建界面进行如下选择:

  • Project:选择 Maven 作为项目管理工具,Maven 强大的依赖管理和项目构建能力能让我们的开发过程更加顺畅。
  • Spring Boot Version:挑选最新的稳定版本,以享受 Spring Boot 3 带来的新特性与性能优化。
  • Dependencies:添加 “Spring Web” 依赖。因为我们后续需要通过 HTTP 接口来提供二维码生成服务,Spring Web 为构建 Web 应用提供了便捷的支持。

完成上述设置后,点击 “Generate” 按钮,下载生成的项目压缩包,解压后将项目导入到你所偏好的开发工具中,比如 IntelliJ IDEA 或者 Eclipse。

(二)引入二维码生成依赖

要在 Spring Boot 项目中生成二维码,我们需要借助一个功能强大的第三方库 ——com.google.zxing。它是一个开源的二维码生成和解析库,能帮助我们轻松实现二维码相关的操作。

在项目的pom.xml文件中添加如下依赖:

<dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.5.1</version> <!-- 请根据实际情况选择最新版本 --> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.5.1</version> <!-- 请根据实际情况选择最新版本 --> </dependency>

其中,core模块提供了二维码生成和解析的核心功能,javase模块则提供了在 Java 环境下对二维码进行操作的工具类。添加完依赖后,Maven 会自动下载并将其添加到项目中。

编写二维码生成代码

(一)创建二维码生成服务类

在项目中创建一个名为QrCodeService的类,该类将用于封装二维码生成的具体逻辑。

import com.google.zxing.BarcodeFormat; import com.google.zxing.EncodeHintType; import com.google.zxing.MultiFormatWriter; import com.google.zxing.NotFoundException; import com.google.zxing.Result; import com.google.zxing.WriterException; import com.google.zxing.client.j2se.MatrixToImageWriter; import com.google.zxing.common.BitMatrix; import com.google.zxing.qrcode.QRCodeWriter; import com.google.zxing.qrcode.QRCodeReader; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.HashMap; import java.util.Map; import javax.imageio.ImageIO; public class QrCodeService { private static final int WIDTH = 300; private static final int HEIGHT = 300; private static final String FORMAT = "png"; public void generateQRCode(String content, String filePath) throws WriterException, IOException { Map<EncodeHintType, Object> hints = new HashMap<>(); hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, WIDTH, HEIGHT, hints); File file = new File(filePath); MatrixToImageWriter.writeToPath(bitMatrix, FORMAT, file.toPath()); } public String decodeQRCode(String filePath) throws IOException, NotFoundException { File file = new File(filePath); BufferedImage image = ImageIO.read(file); QRCodeReader reader = new QRCodeReader(); Result result = reader.decode(new HashingMultiSource(new BufferedImageLuminanceSource(image))); return result.getText(); } }

在上述代码中,generateQRCode方法用于生成二维码。它接收两个参数,content表示要编码到二维码中的内容,比如物料的名称、编号、规格等信息;filePath表示生成的二维码图片要保存的路径。

方法内部首先创建了一个Map对象hints,用于设置二维码生成的一些参数。其中,CHARACTER_SET设置为 “UTF - 8”,以支持多种字符编码;ERROR_CORRECTION设置为ErrorCorrectionLevel.H,表示二维码的错误纠正级别为最高等级,即使二维码部分损坏也能大概率被正确识别。

接着,通过MultiFormatWriter的encode方法生成BitMatrix对象,该对象表示二维码的矩阵信息。最后,使用MatrixToImageWriter的writeToPath方法将BitMatrix对象写入到指定路径的文件中,从而生成二维码图片。

decodeQRCode方法则用于解析二维码,接收二维码图片的路径作为参数,返回解析出的内容。

(二)设置二维码生成参数详解

在generateQRCode方法中,我们设置了一些二维码生成的参数,这里详细介绍一下这些参数的作用:

字符编码(CHARACTER_SET):设置为 “UTF - 8”,确保可以正确处理各种语言的字符。在物料管理中,物料信息可能包含中文、英文、数字以及特殊符号等,使用 UTF - 8 编码能保证这些信息都能准确无误地被编码到二维码中。

错误纠正级别(ERROR_CORRECTION)

  • 二维码的错误纠正级别分为四个等级:L(低,约 7% 的错误纠正率)、M(中,约 15% 的错误纠正率)、Q(较高,约 25% 的错误纠正率)、H(高,约 30% 的错误纠正率)。
  • 在物料管理场景中,由于二维码可能会因为磨损、污渍等原因导致部分信息丢失。选择H级别能最大程度保证即使二维码有一定程度的损坏,扫码设备依然可以正确识别其中的信息,确保物料管理流程不受影响。

条码格式(BarcodeFormat):这里我们选择了BarcodeFormat.QR_CODE,表示生成的是二维码格式。ZXing 库还支持多种其他条码格式,如EAN_13(常用于商品条码)、UPC_A等,但在物料管理中,二维码因其更大的数据存储容量和更高的容错性而更适合。

(三)创建控制器提供二维码生成接口

为了方便外部调用二维码生成功能,我们需要创建一个控制器类。在项目中创建一个带有@RestController注解的控制器类,比如QrCodeController:

import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; @RestController public class QrCodeController { private final QrCodeService qrCodeService; public QrCodeController(QrCodeService qrCodeService) { this.qrCodeService = qrCodeService; } @GetMapping("/generateQrCode") public String generateQrCode( @RequestParam String content, @RequestParam String filePath) { try { qrCodeService.generateQRCode(content, filePath); return "二维码生成成功,保存路径为:" + filePath; } catch (Exception e) { e.printStackTrace(); return "二维码生成失败:" + e.getMessage(); } } }

在上述代码中,QrCodeController通过构造函数注入了QrCodeService。generateQrCode方法使用@GetMapping注解映射到 “/generateQrCode” 路径,接收两个@RequestParam参数,content为要生成二维码的内容,filePath为二维码图片的保存路径。方法内部调用QrCodeService的generateQRCode方法生成二维码,并根据生成结果返回相应的提示信息。

在物料管理场景中的应用示例

假设我们有一个物料管理系统,需要为每个物料生成一个二维码,用于记录物料的详细信息,如物料名称、编号、规格、生产日期、保质期等。

(一)物料信息封装

首先,创建一个Material类来封装物料信息:

public class Material { private String id; private String name; private String specification; private String productionDate; private String expirationDate; // 省略getter和setter方法 }

(二)生成物料二维码

在实际业务逻辑中,当新增一个物料时,我们可以根据物料信息生成对应的二维码。例如:

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @Service public class MaterialService { @Autowired private QrCodeService qrCodeService; public void addMaterial(Material material) { // 假设生成的二维码保存路径为 /qrCodes/{物料编号}.png String filePath = "/qrCodes/" + material.getId() + ".png"; String content = "物料名称:" + material.getName() + "\n" + "物料编号:" + material.getId() + "\n" + "规格:" + material.getSpecification() + "\n" + "生产日期:" + material.getProductionDate() + "\n" + "保质期:" + material.getExpirationDate(); try { qrCodeService.generateQRCode(content, filePath); // 这里还可以添加将物料信息保存到数据库等其他业务逻辑 } catch (Exception e) { e.printStackTrace(); // 处理二维码生成失败的情况 } } }

在上述代码中,MaterialService的addMaterial方法接收一个Material对象。方法内部根据物料的各项信息拼接成一个字符串content,作为要编码到二维码中的内容。然后调用QrCodeService的generateQRCode方法生成二维码,并保存到指定路径。同时,在实际应用中,我们还可以在二维码生成成功后,将物料信息保存到数据库中,实现物料信息的持久化管理。

(三)扫码获取物料信息

在物料管理过程中,工作人员可以通过扫码设备扫描物料上的二维码来获取物料信息。在我们的系统中,可以通过调用QrCodeService的decodeQRCode方法来实现:

public class ScanService { @Autowired private QrCodeService qrCodeService; public String getMaterialInfoFromQrCode(String qrCodeFilePath) { try { return qrCodeService.decodeQRCode(qrCodeFilePath); } catch (Exception e) { e.printStackTrace(); return "二维码解析失败:" + e.getMessage(); } } }

ScanService的getMaterialInfoFromQrCode方法接收二维码图片的路径作为参数,调用QrCodeService的decodeQRCode方法解析二维码,并返回解析出的物料信息。

总结

通过以上步骤,我们成功地在 Spring Boot 3 项目中实现了物料管理二维码生成的功能。从项目搭建、依赖引入,到二维码生成代码的编写以及在物料管理场景中的实际应用,每个环节都紧密相扣。

在实际项目中,我们还可以对该功能进行进一步拓展:

  • 添加 LOGO 到二维码:可以在生成二维码时,将公司的 LOGO 或者物料所属品牌的标识添加到二维码中,使二维码更加个性化和易于识别。通过 ZXing 库的相关 API,可以实现将图片嵌入到二维码的中心位置。
  • 优化二维码生成性能:在大量物料需要生成二维码的场景下,可以考虑使用多线程等技术来提高二维码生成的效率。同时,合理设置缓存机制,对于已经生成过的相同内容的二维码,直接从缓存中获取,避免重复生成。
  • 与其他系统集成:将物料管理二维码生成功能与企业的其他系统,如库存管理系统、采购系统等进行集成,实现数据的互联互通,进一步提升企业的数字化管理水平。

希望本文能为各位从事互联网软件开发的同仁们在实现物料管理二维码生成功能时提供有益的参考和帮助,让我们一起在数字化的道路上不断探索前行。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/7 4:28:48

22、服务器安全与OpenVPN隧道搭建全攻略

服务器安全与OpenVPN隧道搭建全攻略 在当今数字化的时代,服务器安全和远程连接的稳定性是至关重要的。本文将详细介绍系统资源审计、已安装软件搜索、服务器安全配置以及OpenVPN隧道搭建等方面的知识,帮助你提升服务器的安全性和远程工作的效率。 1. 系统资源审计 系统资源…

作者头像 李华
网站建设 2026/7/7 8:08:40

你还在 for 循环里使用 await?异步循环得这样写

你还在 for 循环里使用 await&#xff1f;异步循环得这样写 1. 前言 在循环中使用 await&#xff0c;代码看似直观&#xff0c;但运行时要么悄无声息地停止&#xff0c;要么运行速度缓慢&#xff0c;这是为什么呢&#xff1f; 本篇聊聊 JavaScript 中的异步循环问题。 2. 踩坑 …

作者头像 李华
网站建设 2026/7/6 14:07:59

新榜小豆芽全场景运维指南:多账号管理能力与常见故障精准排查

在新媒体运营工具迭代加速的当下&#xff0c;新榜小豆芽凭借新媒体浏览器、多开浏览器、指纹浏览器的核心技术&#xff0c;以及多账号管理、多账号登录、任意平台登录、团队分享使用的全链路能力&#xff0c;成为多平台账号运营的核心工具。但在实际使用中&#xff0c;用户常遭…

作者头像 李华
网站建设 2026/7/7 6:44:17

8、树莓派项目开发:数字时钟、邮件通知器与闹钟

树莓派项目开发:数字时钟、邮件通知器与闹钟 1. 开发数字时钟 在将LCD引脚按照之前所示的图表连接到树莓派后,启动树莓派。以下是开发数字时钟的步骤: 1. 创建Python脚本 :右键选择Create | New File,创建一个名为DigitalClock.py的新文件,并将以下代码复制到该文件…

作者头像 李华
网站建设 2026/7/7 0:16:24

达梦数据库V8视图和索引实战指南

一、前言&#xff1a;视图与索引 —— 达梦数据库性能优化的核心双擎作为连续 12 年国产数据库市场占有率第一的标杆产品&#xff0c;达梦数据库 V8&#xff08;DM8&#xff09; 凭借多模融合架构与金融级性能&#xff0c;在政务、金融、电信等关键领域实现对 Oracle 的规模化替…

作者头像 李华
网站建设 2026/7/7 18:31:35

收藏这篇就够了!5大AI生成PPT工具优缺点全解析,帮你省下90%时间

真实体验分享&#xff0c;帮你找到最适合自己的PPT效率工具 大家好&#xff0c;我是小林&#xff0c;一个经常需要做各种汇报的普通职场人。和很多人一样&#xff0c;我曾经也是“PPT困难户”——每次要做PPT就头疼&#xff0c;从找模板到排版设计&#xff0c;从整理内容到制作…

作者头像 李华