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 @ 2021-03-15 23:09  陈彦斌  阅读(135)  评论(0编辑  收藏  举报