废话不多说,直接上代码,实现的功能比较简单:利用Google的zxing.jar包,在网页上直接生成二维码,基础代码比较简单,其他功能有待各位去拓展,解析由前端找插件解析就行了,我就没做解析。注意,jdk请保持在1.7及其以上版本
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
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;
/*
* 二维码生成
*/
public class QRCodeMaker {
/**
* 二维码输出到网页
* @param content 需要编码的信息,由这个信息生成二维码
* @param response
*/
public static void printInWebpage(String content, HttpServletResponse response){
try {
//设定图片尺寸,格式
int qrcodeWidth = 200;
int qrcodeHeight = 200;
String qrcodeFormat = "png";
HashMap<EncodeHintType, String> hints = new HashMap<EncodeHintType, String>();
hints.put(EncodeHintType.CHARACTER_SET, "UTF-8");
ServletOutputStream out = response.getOutputStream();
BitMatrix bitMatrix = new MultiFormatWriter().encode(content, BarcodeFormat.QR_CODE, qrcodeWidth, qrcodeHeight, hints);
BufferedImage image = new BufferedImage(qrcodeWidth, qrcodeHeight, BufferedImage.TYPE_INT_RGB);
MatrixToImageWriter.writeToStream(bitMatrix,qrcodeFormat,out);
} catch (Exception e) {
e.printStackTrace();
}
}
}
在我的项目应用中,我是将这个二维码生成封装成工具类,在我的控制类里面是这么调用的:
@RequestMapping("/points/QRCode/get")
@ResponseBody
public void getPartrolPointsQRCode(BusPatrolPoints points,
HttpServletRequest request, HttpServletResponse response){
//安保线上地址
String content=Constant.SAFETY_ONLINE_URL+"?point="+points.getPointId();
QRCodeMaker.printInWebpage(content, response);
}
我这里实现的是扫码跳转到我的项目里面,Constant.SAFETY_ONLINE_URL保存的是线上项目的地址,这里不方便透露。如果是我们项目的APP,扫码后会跳转到相应的页面进行解析,如果是外部应用,则会跳转到我们项目的登录页面,过滤器里面弄一下就可以实现了。来源:CSDN
作者:yuhenewbie
链接:https://blog.csdn.net/zyhlearnjava/article/details/80250959