1:添加依賴
<!-- 二維碼支持包 --> <dependency> <groupId>com.google.zxing</groupId> <artifactId>core</artifactId> <version>3.2.0</version> </dependency> <dependency> <groupId>com.google.zxing</groupId> <artifactId>javase</artifactId> <version>3.2.0</version> </dependency>
controller層:
1:獲取要生成二維碼的內容傳給前端
//輸入二維碼要生成的內容 @RequestMapping(value = "/open") public ModelAndView open( String qrid1){ ModelAndView mv=new ModelAndView(); mv.addObject("qrid",qrid1); mv.setViewName("/qrcode.btl"); return mv; }
前端頁面:
<form id="enter" action="/qr/open" method="post" class="form-horizontal form-label-left"> <div class="form-group"> <label class="control-label col-md-3 col-sm-3 col-xs-12">票編號</label> <div class="col-md-9 col-sm-9 col-xs-12"> <input name="qrid1" id="qrid1" type="text" class="form-control" placeholder="請輸入有效的票編號"required> <span style="color: red" id="warning"></span> </div> <div class="modal-footer"> <button type="submit" class="btn btn-primary">提交</button> </div> </div> </form>
這里再通過調用輸入的東西生成二維碼圖片:
<img src="/qr/qrcode?content=${qrid}"/>
上面src調用了/qr/qrcode
把輸入的qrid傳入進去。
注意action的地址,我controller的地址是/qr 所以我地址前面都寫了/qr
/** * 生成二維碼方法 * * @param content 要生成的內容 * @param resp response對象 * @throws Exception 拋出異常 */ @RequestMapping(value = "/qrcode") public void getQrcode(String content, HttpServletResponse resp) throws Exception { ServletOutputStream stream = null; /* Long qrid=Long.parseLong(content); Ticket ticket=ticketRepository.findByTicketId(qrid); if (ticket!=null) {*/ try { stream = resp.getOutputStream(); Map<EncodeHintType, Object> hints = new HashMap<>(); //編碼 hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); //邊框距 hints.put(EncodeHintType.MARGIN, 0); QRCodeWriter qrCodeWriter = new QRCodeWriter(); BitMatrix bm = qrCodeWriter.encode(content, BarcodeFormat.QR_CODE, 200, 200, hints); MatrixToImageWriter.writeToStream(bm, "png", stream); } catch (WriterException e) { e.getStackTrace(); } finally { if (stream != null) { stream.flush(); stream.close(); } } }
一開始剛打開這個頁面是沒有填寫數據的,應該寫一個方法打開這個頁面,賦好值
//打開生成二維碼頁面。 @RequestMapping(value = "/open1") public ModelAndView open1(String qrid1){ ModelAndView mv = new ModelAndView(); qrid1="當前票為空"; mv.addObject("qrid",qrid1); mv.setViewName("/qrcode.btl"); return mv; }
然后就在可以在前端頁面輸入你要生成二維碼的內容啦。
剛打開頁面:
輸入數據后: