1.添加maven依赖,
<!-- 谷歌zxing 二维码 -->
<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>
2.生成二维码的工具类,
package me.zhangbo.mall.utils;
import com.google.zxing.BarcodeFormat;
import com.google.zxing.WriterException;
import com.google.zxing.client.j2se.MatrixToImageWriter;
import com.google.zxing.common.BitMatrix;
import com.google.zxing.qrcode.QRCodeWriter;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Path;
/**
* 描述: 生成二维码工具
*/
public class QRCodeGenerator {
public static void generateQRCodeImage(String text, int width, int height, String filePath)
throws WriterException, IOException {
QRCodeWriter qrCodeWriter = new QRCodeWriter();
//将text的内容进行编码,以二维码的形式进行展现
BitMatrix bitMatrix = qrCodeWriter.encode(text, BarcodeFormat.QR_CODE, width, height);
//Path用于来表示文件路径和文件
Path path = FileSystems.getDefault().getPath(filePath);
//保存二维码到指定的路径
MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path);
}
}
3.测试二维码工具类,
public static void main(String[] args) {
try {
generateQRCodeImage("Hello World", 350, 350,
"C:/Users/JPF/Desktop/QRtest.png");
} catch (WriterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
4.测试结果,
5.service
@Override
public String orderQRCode(String orderNo) {
ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
HttpServletRequest request = attributes.getRequest();
String address = ip + ":" + request.getLocalPort();
String payUrl = "http://" + address + "/pay?orderNo=" + orderNo;
try {
QRCodeGenerator.generateQRCodeImage(payUrl, 350, 350,
Constant.FILE_UPLOAD_DIR + orderNo + ".png");
} catch (WriterException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
String pngAddress = "http://" + address + "/images/" + orderNo + ".png";
return pngAddress;
}
6.controller,
@PostMapping("order/qrcode")
@ApiOperation("生成支付二维码")
public ApiGeneralResponse orderQRCode(@RequestParam String orderNo) {
String pngAdress = orderService.orderQRCode(orderNo);
return ApiGeneralResponse.success(pngAdress);
}
7.测试结果,
访问图片的URL,即访问服务器上面的图片资源,在本地找到与URL对应的路径,在客户端中进行显示:
二维码解码得到的是订单的支付链接:
二维码图片在服务器本地的实际位置:
原文:https://www.cnblogs.com/little-mao2020/p/14741911.html