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);
    }

}
相关推荐
再吃一根胡萝卜1 天前
微服务治理的“四大护法”:从 Django 视角理解 Spring Cloud 核心组件
后端
再吃一根胡萝卜1 天前
面试终极挑战:如何用 Django 经验,回答 Java 微服务实战问题?
后端
To_OC1 天前
装完 ESLint 它一声不吭?我还以为代码写得多好
后端·node.js·eslint
St_rive1 天前
Page Object设计模式
java·开发语言·设计模式
风流 少年1 天前
Spring AI 2.0:SSE
java·人工智能·spring
凤山老林1 天前
精细化流量治理:Spring Boot 动态特性开关与灰度发布体系
java·spring boot·后端
vipbic1 天前
一个前端的 9 天重构:我是怎么用 Codex 重做航栈的
前端·javascript·后端
Aphelios3801 天前
一次锁内网络IO引发的Tomcat线程池“饿死”事故
java·开发语言·spring boot·elasticsearch·tomcat·网络io阻塞·线程池耗尽
不可求~1 天前
C++ std::string_view 不是字符串:从悬空引用到安全用法
java·开发语言·c++
Lam Tang1 天前
APS 系列文章10
java·代理模式