SpringBoot zxing 生成二维码图片

添加依赖#

复制代码
        <!--google二维码生成包-->
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>javase</artifactId>
            <version>3.4.1</version>
        </dependency>
        <dependency>
            <groupId>com.google.zxing</groupId>
            <artifactId>core</artifactId>
            <version>3.4.1</version>
        </dependency>
复制代码

控制器#

复制代码
package com.ybchen.controller;

import com.google.zxing.BarcodeFormat;
import com.google.zxing.EncodeHintType;
import com.google.zxing.MultiFormatWriter;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
import com.ybchen.dto.VideoOrderDto;
import com.ybchen.service.VideoOrderService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.Map;

/**
 * @Description:视频-订单控制器
 * @Author:chenyanbin
 * @Date:2021/3/12 下午5:08
 * @Versiion:1.0
 */
@RestController
//@RequestMapping("/user/api/v1")
@RequestMapping("/api/v1/order")
public class OrderController {
    @Autowired
    private VideoOrderService videoOrderService;

    /**
     * 下单
     *
     * @param videoId
     * @param request
     * @return
     */
    @GetMapping("add")
    public void saveOrder(
            @RequestParam(value = "video_id", required = true) int videoId,
            HttpServletRequest request,
            HttpServletResponse response
    ) throws Exception {
        //获取用户ip
//        String ip = IpUtils.getIpAddr(request);
        String ip = "127.0.0.1";
        //用户id
//        int userId = (Integer) request.getAttribute("user_id");
        int userId = 1;
        VideoOrderDto videoOrderDto = new VideoOrderDto();
        videoOrderDto.setUserId(userId);
        videoOrderDto.setVideoId(videoId);
        videoOrderDto.setIp(ip);
        String codeUrl = videoOrderService.save(videoOrderDto);
        System.out.println("codeUrl");
        System.out.println(codeUrl);
        if (codeUrl == null) {
            throw new NullPointerException();
        }
        try {
            //生成二维码
            //参考链接:https://pay.weixin.qq.com/wiki/doc/api/native.php?chapter=6_5&index=3
            Map<EncodeHintType, Object> hints = new HashMap<>();
            //生成纠错等级
            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.L);
            //设置编码
            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
            //构造图片对象,第一个参数:二维码内容;第二个参数:二维码格式;第三个参数:宽;第四个参数:高;第五个参数:配置信息
            BitMatrix bitMatrix = new MultiFormatWriter().encode(
                    "chenyanbin",
                    BarcodeFormat.QR_CODE,
                    400,
                    400,
                    hints
            );
            //拿到输出流
            ServletOutputStream outputStream = response.getOutputStream();
            MatrixToImageWriter.writeToStream(bitMatrix, "png", outputStream);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
复制代码

演示#

 

posted @   陈彦斌  阅读(141)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
历史上的今天:
2020-03-15 idea 调试快捷键
2020-03-15 Unable to start web server; nested exception is org.springframework.context.ApplicationContextException
点击右上角即可分享
微信分享提示
主题色彩