SpringBoot中生成二维码的案例实战

随着移动互联网的发展,二维码已经成为了信息传递的重要方式。在SpringBoot项目中生成二维码是一个颇为常见的需求,接下来我们就通过一个简单的案例来学习如何在SpringBoot中生成二维码。

1. 项目结构

首先,我们需要创建一个SpringBoot项目。使用Spring Initializr(https://start.spring.io/)生成一个基础项目,选择以下依赖:

  • Spring Web
  • Lombok(可选)
  • Spring Boot DevTools(可选,用于热部署)

生成项目后,将下载的zip包解压并导入到你喜欢的IDE中。

2. 添加依赖

pom.xml中,我们需要添加二维码生成的库依赖。我们可以使用ZXing(Zebra Crossing)库来生成二维码。以下是需要添加的Maven依赖:

<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>core</artifactId>
    <version>3.3.3</version>
</dependency>
<dependency>
    <groupId>com.google.zxing</groupId>
    <artifactId>javase</artifactId>
    <version>3.3.3</version>
</dependency>

3. 创建二维码生成服务

接下来,我们创建一个服务类QRCodeGeneratorService来生成二维码。

import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import org.springframework.stereotype.Service;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.UUID;

@Service
public class QRCodeGeneratorService {

    public byte[] generateQRCode(String text) throws WriterException, IOException {
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, 300, 300);

        BufferedImage bufferedImage = new BufferedImage(bitMatrix.getWidth(), bitMatrix.getHeight(), BufferedImage.TYPE_INT_RGB);
        for (int x = 0; x < bitMatrix.getWidth(); x++) {
            for (int y = 0; y < bitMatrix.getHeight(); y++) {
                bufferedImage.setRGB(x, y, bitMatrix.get(x, y) ? 0xFF000000 : 0xFFFFFFFF);
            }
        }

        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "png", baos);
        return baos.toByteArray();
    }
}

4. 创建控制器

然后我们创建一个控制器QRCodeController,通过HTTP请求来触发二维码的生成。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.io.ByteArrayResource;
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.imageio.ImageIO;
import com.google.zxing.WriterException;
import java.io.IOException;

@RestController
public class QRCodeController {

    @Autowired
    private QRCodeGeneratorService qrCodeGeneratorService;

    @GetMapping("/generateQRCode")
    public ResponseEntity<ByteArrayResource> generateQRCode(@RequestParam String text) {
        try {
            byte[] qrCodeImage = qrCodeGeneratorService.generateQRCode(text);
            return ResponseEntity.ok()
                    .header(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=QRCode.png")
                    .contentType(org.springframework.http.MediaType.IMAGE_PNG)
                    .body(new ByteArrayResource(qrCodeImage));
        } catch (WriterException | IOException e) {
            return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(null);
        }
    }
}

5. 运行项目

启动SpringBoot应用后,我们可以通过访问http://localhost:8080/generateQRCode?text=your_text_here来生成二维码。通常,你可以在浏览器中直接输入这个URL,或者使用Postman等工具发起请求。

总结

通过上述步骤,我们在SpringBoot中成功实现了二维码的生成。这个案例展示了如何使用ZXing库生成二维码,并通过控制器将其返回给客户端。你可以在此基础上进行扩展,比如将二维码保存在服务器、支持不同格式的二维码等。希望这篇文章对你有所帮助!

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部