下载依赖
<!-- ZXing Core 依赖 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>core</artifactId>
<version>3.4.1</version> <!-- 或者更高版本 -->
<!-- 这个依赖包含了 ZXing 核心功能,包括条形码和二维码的编码和解码算法 -->
</dependency>
<!-- ZXing JavaSE 依赖 -->
<dependency>
<groupId>com.google.zxing</groupId>
<artifactId>javase</artifactId>
<version>3.4.1</version> <!-- 或者更高版本 -->
<!-- 这个依赖包含了 ZXing 在 Java SE 环境下的实现,包括图像处理和图形用户界面相关的类 -->
</dependency>
配置工具类
@Component
public class CodeUtils {
/**
* 生成永久二维码
*
* @param text 要编码为二维码的文本内容
* @param width 二维码的宽度
* @param height 二维码的高度
* @param filePath 生成的二维码图片保存的路径
*/
public void generateQRCodeImage(String text, int width, int height, String filePath) {
try {
// 创建 QRCodeWriter 实例
QRCodeWriter qrCodeWriter = new QRCodeWriter();
// 设置编码提示信息,这里设置错误校正级别为 L
Map<EncodeHintType, Object> hints = new HashMap<>();
hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
// 编码文本内容为 BitMatrix
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height, hints);
// 创建 BufferedImage 对象,用于绘制二维码图像
BufferedImage bufferedImage = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
// 获取 Graphics2D 对象,用于绘图
Graphics2D graphics = (Graphics2D) bufferedImage.getGraphics();
// 设置背景颜色为白色
graphics.setColor(Color.WHITE);
graphics.fillRect(0, 0, width, height);
// 设置前景颜色为黑色
graphics.setColor(Color.BLACK);
// 根据 BitMatrix 绘制二维码
for (int i = 0; i < width; i++) {
for (int j = 0; j < height; j++) {
if (bitMatrix.get(i, j)) {
// 如果当前位为 true,则绘制一个黑色的小方块
graphics.fillRect(i, j, 1, 1);
}
}
}
// 将生成的二维码图像写入指定的文件路径
ImageIO.write(bufferedImage, "png", new File(filePath));
// 关闭 Graphics2D 对象
graphics.dispose();
} catch (WriterException | IOException e) {
// 捕获并打印异常信息
e.printStackTrace();
}
}
}
添加配置文件
#生成二维码
backend:
#这里是二维码图片的保存路径
Path: 'D:\\code\\'
添加业务层
// 引入Lombok的@Slf4j注解,自动生成日志对象
@Slf4j
// 允许跨域请求,使得前端应用可以从不同的域名访问后端API
@CrossOrigin
// 标记该类为Spring MVC的控制器,用于处理HTTP请求
@RestController
// 设置该控制器的请求映射基础路径
@RequestMapping("/code")
public class CodeController {
// 通过@Autowired注解自动装配QRCodeService的实现类
@Autowired
private CodeServer codeServer;
// 定义一个GET请求的处理方法,映射路径为"/api/common/QRCode"
@GetMapping("/QRCode")
public String save() {
// 调用QRCodeService中的getQRCode方法生成二维码
codeServer.getQRCode();
// 返回字符串"生成成功"作为HTTP响应体
return "生成成功";
}
}
public interface CodeServer {
/**
* 获取二维码
*/
void getQRCode();
}
@Service
public class CodeServerImpl implements CodeServer {
// 通过@Autowired自动装配QRCodeGeneratorUtils实例,该工具类用于生成二维码
@Autowired
private CodeUtils codeUtils;
// 使用@Value注解从配置文件中读取后台路径,并赋值给path变量
@Value("${backend.Path}")
private String path;
@Override
public void getQRCode() {
try {
// 定义二维码图片的保存路径,使用了前面从配置文件中读取到的路径
String QR_CODE_IMAGE_PATH = path + "MyQRCode.png";
// 定义要编码为二维码的文本内容,这里是一个示例URL
String QR_CODE_TEXT = "https://www.baidu.com";
// 调用qrCodeGeneratorUtils工具类的generateQRCodeImage方法生成二维码图片
// 参数分别为:要编码的文本、二维码宽度、二维码高度、二维码图片的保存路径
codeUtils.generateQRCodeImage(QR_CODE_TEXT, 350, 350, QR_CODE_IMAGE_PATH);
} catch (Exception e) {
// 捕获异常,打印堆栈信息。在实际应用中,可能需要更详细的错误处理逻辑
e.printStackTrace();
}
}
}
访问接口

