spring boot 通过zxing生成二维码

Spring Boot是一个基于Spring框架的快速开发、便捷部署的微服务框架。而ZXing是一个功能强大的开源库,用于生成和解析二维码。在Spring Boot应用中,您可以整合ZXing库来方便地生成二维码。

接下来,创建一个Spring Boot服务,并编写一个控制器类来生成二维码。以下是一个简单的例子:

java 复制代码
@RestController
public class QrController {

    @Resource
    private CouponApi couponApi;


    @GetMapping("/qr")
    public ResponseEntity<byte[]> getImageData(CouponRequest request) throws IOException, WriterException {

        ResponseEntity<byte[]> result=new ResponseEntity<>(HttpStatus.INTERNAL_SERVER_ERROR);

        ResponseObject<CouponResponse> res = couponApi.view(request);
        if (res.getCode()!=200){
            return result;
        }

        Map<EncodeHintType, Object> hints = new HashMap<>();
        hints.put(EncodeHintType.MARGIN,1);
        QRCodeWriter qrCodeWriter = new QRCodeWriter();
        String data=String.format("http://www.niubaite.com/check?id=%d&code=%s",res.getData().getId(),res.getData().getCouponCode());
        BitMatrix bitMatrix = qrCodeWriter.encode(data, BarcodeFormat.QR_CODE, 300, 300, hints);

        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 outputStream=new ByteArrayOutputStream();
        ImageIO.write(bufferedImage, "png", outputStream);
        byte[] imageData =outputStream.toByteArray();

        HttpHeaders headers = new HttpHeaders();
        headers.add("Content-Type", "image/png"); // 设置内容类型为图像

        return new ResponseEntity<>(imageData, headers, HttpStatus.OK);
    }

}
相关推荐
xuejianxinokok14 分钟前
PostgreSQL 18 新功能:虚拟生成列
数据库·后端
未来影子15 分钟前
SpringAI(GA):Neo4j向量数据库存储快速上手
后端
渣哥15 分钟前
shutdown 和 shutdownNow 有啥不一样?一文看懂 Java 线程池关闭方式
java
武子康17 分钟前
大数据-95 Spark 集群 SparkSQL Action与Transformation操作 详细解释与测试案例
大数据·后端·spark
知其然亦知其所以然19 分钟前
MySQL8.x 面试高频题:为什么一定要有主键?99%的人答不全
后端·mysql·面试
FE_C_P小麦22 分钟前
Git 常用指令
前端·后端·github
李少兄28 分钟前
@DateTimeFormat.fallbackPatterns 详解
java
某某祺28 分钟前
向量存储、检索及 Qdrant 浅析
后端
天天摸鱼的java工程师31 分钟前
线上服务无辜假死状态:一次 GC Overhead 的深度排查
java·后端