欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼

 更新時(shí)間:2024年02月28日 11:19:42   作者:Blet-  
二維碼在現(xiàn)代社交和營銷活動(dòng)中被廣泛使用,本文主要介紹了SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼,文中通過示例代碼介紹的非常詳細(xì),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

二維碼在現(xiàn)代社交和營銷活動(dòng)中被廣泛使用。我們可以在各種渠道上看到二維碼的身影,如微信,支付寶,以及其他應(yīng)用程序中。在本篇博客中,我們將使用SpringBoot和Vue框架來演示如何創(chuàng)建一個(gè)能夠自動(dòng)生成并定期刷新的動(dòng)態(tài)二維碼。

技術(shù)方案

我們會(huì)使用以下技術(shù)和框架實(shí)現(xiàn)這個(gè)案例:

  • Spring Boot,用于后端服務(wù)端開發(fā)
  • VueJS和Element UI,用于前端UI以及與后端的交互
  • QRCode,使用開源庫生成動(dòng)態(tài)二維碼
  • WebSocket,實(shí)現(xiàn)實(shí)時(shí)推送更新動(dòng)態(tài)二維碼

實(shí)現(xiàn)

1. 初始化項(xiàng)目

使用Spring Initializr(https://start.spring.io/)初始化一個(gè)Spring Boot項(xiàng)目,加入以下的依賴:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
<dependency>
    <groupId>net.glxn</groupId>
    <artifactId>qrgen</artifactId>
    <version>1.4.1</version>
</dependency>

2. 實(shí)現(xiàn)服務(wù)端

在服務(wù)端我們會(huì)創(chuàng)建一個(gè)WebSocket連接,用來實(shí)時(shí)推送動(dòng)態(tài)二維碼。我們創(chuàng)建一個(gè)QRCodeService類,實(shí)現(xiàn)動(dòng)態(tài)二維碼的生成和數(shù)據(jù)推送邏輯。

首先在QRCodeService里面定義一個(gè)WebSocketTemplate,用來向客戶端推送消息。

@Service
public class QRCodeService {
    @Autowired
    private SimpMessagingTemplate template;

    // ...
}

接下來定義生成動(dòng)態(tài)二維碼的方法。

public static BufferedImage generateQRImage(String text) throws Exception {
    ByteArrayOutputStream out = QRCode.from(text).to(ImageType.PNG).stream();
    ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray());
    return ImageIO.read(in);
}

上述方法使用QRCode庫生成二維碼,并將結(jié)果作為BufferedImage返回。

接下來是實(shí)現(xiàn)使用WebSocket發(fā)送消息的方法。

@Scheduled(fixedRateString = "${frequency}")
public void generateQRCode() throws Exception {
    String message = LocalDateTime.now().toString();
    BufferedImage qrImage = generateQRImage(message);
    ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
    ImageIO.write(qrImage, "png", outputStream);
    byte[] bytes = Base64.encodeBase64(outputStream.toByteArray());

    template.convertAndSend("/topic/qrCode", new String(bytes));
}

這個(gè)方法會(huì)定期生成一個(gè)新的二維碼,并使用Base64編碼轉(zhuǎn)換為字符串,然后使用WebSocket將其推送到客戶端。

使用@Scheduled注解可以設(shè)置定時(shí)任務(wù),在這里我們可以設(shè)置fixedRate參數(shù)來指定生成二維碼的頻率。這個(gè)參數(shù)可以從application.properties文件中讀取。

現(xiàn)在,服務(wù)端的代碼已經(jīng)完成了。

3. 實(shí)現(xiàn)客戶端

我們將使用Vue作為我們的前端框架。使用Vue-Cli命令行工具初始化一個(gè)新的Vue項(xiàng)目。

打開App.vue,在template部分定義一個(gè)div元素用于展示動(dòng)態(tài)二維碼。

<template>
  <div id="app">
    <el-card v-if="qrcodeUrl" class="box-card">
        <div style="text-align: center;">
          <img v-bind:src="qrcodeUrl" height="40%"/>
        </div>
    </el-card>
  </div>
</template>

我們使用Element UI組件庫中的card組件來布局界面。qrcodeUrl是用來顯示動(dòng)態(tài)二維碼的URL地址。

在App.vue中還需要定義一下我們的WebSocket連接代碼。

<script>
export default {
  name: 'App',
  data() {
    return {
      qrcodeUrl: null
    }
  },
  mounted() {
    const url = 'ws://localhost:8080/ws/qrCode';
    this.socket = new WebSocket(url);
    this.socket.onmessage = (event) => {
      const imageData = event.data;
      const imageUrl = 'data:image/png;base64,' + imageData;
      this.qrcodeUrl = imageUrl;
    };
  }
}
</script>

上述代碼會(huì)在組件掛載后創(chuàng)建一個(gè)WebSocket連接,它通過url連接到服務(wù)器端的webSocket中心。當(dāng)接收到服務(wù)端發(fā)送的消息,客戶端會(huì)將收到的圖片數(shù)據(jù)解碼,將解碼后的data URL賦值給qrcodeUrl。

接下來定義一個(gè)生成二維碼的方法,用于向服務(wù)端發(fā)送請求來生成新的動(dòng)態(tài)二維碼。

<template>
  <!-- ... -->
  <el-button @click="generateQRCode()">生成</el-button>
  <!-- ... -->
</template>

<script>
export default {
  // ...
  methods: {
    generateQRCode() {
      this.$axios.get('/generateQRCode').then(response => {
        console.log(response);
      }).catch(error => {
        console.log(error);
      })
    }
  }
}
</script>

上述代碼我們在Vue中定義了一個(gè)方法,它向服務(wù)端發(fā)送一個(gè)請求,從而生成新的二維碼。我們使用axios庫來發(fā)送HTTP請求。

4. 編寫服務(wù)端的WebSocket配置類

為了讓服務(wù)端支持WebSocket,我們需要定義配置類WebSocketConfig,用來注冊WebSocketEndpoint和WebSocketMessageBroker。在這個(gè)類中我們還要定義啟用WebSocket的CORS配置。

@Configuration
@EnableWebSocketMessageBroker
public class WebSocketConfig implements WebSocketMessageBrokerConfigurer {
 
    @Override
    public void registerStompEndpoints(StompEndpointRegistry registry) {
        registry.addEndpoint("/ws").withSockJS();
    }
 
    @Override
    public void configureMessageBroker(MessageBrokerRegistry registry) {
        registry.enableSimpleBroker("/topic");
        registry.setApplicationDestinationPrefixes("/app");
    }
 
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**")
                .allowedOrigins("*")
                .allowedMethods("GET", "POST")
                .allowCredentials(false).maxAge(3600);
    }
}

現(xiàn)在我們已經(jīng)完成了后端服務(wù)的配置,接下來需要調(diào)整一下前端代碼。

5. 配置前端的axios

在Vue項(xiàng)目的main.js文件中引入axios,并將其掛載到Vue實(shí)例上。

import Vue from 'vue'
import App from './App.vue'
import axios from 'axios'
import 'element-ui/lib/theme-chalk/index.css'
import ElementUI from 'element-ui'

Vue.config.productionTip = false
Vue.use(ElementUI)

axios.defaults.baseURL = 'http://localhost:8080'
Vue.prototype.$axios = axios

new Vue({
  render: h => h(App),
}).$mount('#app')

在除了修改默認(rèn)的baseURL之外,上述代碼中還配置了Element UI組件庫。

我們在瀏覽器運(yùn)行這個(gè)項(xiàng)目,當(dāng)用戶點(diǎn)擊"生成"按鈕時(shí),新的二維碼會(huì)被隨機(jī)生成。按照上面定義的定時(shí)任務(wù),每次生成的二維碼會(huì)在1分鐘后更新。

總結(jié)

在本文中,我們學(xué)習(xí)了如何使用Spring Boot和VueJS框架生成動(dòng)態(tài)二維碼。我們使用了QRCode庫和WebSocket來實(shí)現(xiàn)這個(gè)功能,并使用axios進(jìn)行了前端和后端之間的通信。

到此這篇關(guān)于SpringBoot和Vue實(shí)現(xiàn)動(dòng)態(tài)二維碼的示例代碼的文章就介紹到這了,更多相關(guān)SpringBoot Vue動(dòng)態(tài)二維碼內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java超詳細(xì)梳理異常處理機(jī)制

    Java超詳細(xì)梳理異常處理機(jī)制

    異常就是不正常,比如當(dāng)我們身體出現(xiàn)了異常我們會(huì)根據(jù)身體情況選擇喝開水、吃藥、看病、等?異常處理方法。?java異常處理機(jī)制是我們java語言使用異常處理機(jī)制為程序提供了錯(cuò)誤處理的能力,程序出現(xiàn)的錯(cuò)誤,程序可以安全的退出,以保證程序正常的運(yùn)行等
    2022-04-04
  • Java子類對象的實(shí)例化過程分析

    Java子類對象的實(shí)例化過程分析

    這篇文章主要介紹了Java子類對象的實(shí)例化過程,結(jié)合具體實(shí)例形式分析了java子類對象的實(shí)例化的步驟、原理、實(shí)現(xiàn)方法,需要的朋友可以參考下
    2019-09-09
  • log4j中l(wèi)ogger標(biāo)簽中additivity屬性的用法說明

    log4j中l(wèi)ogger標(biāo)簽中additivity屬性的用法說明

    這篇文章主要介紹了log4j中l(wèi)ogger標(biāo)簽中additivity屬性的用法說明,基于很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • Java中將String轉(zhuǎn)換為int的多種方法

    Java中將String轉(zhuǎn)換為int的多種方法

    字符串轉(zhuǎn)換為整數(shù)是一個(gè)常見需求,本文主要介紹了Java中將String轉(zhuǎn)換為int的多種方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2024-07-07
  • MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā))

    MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā))

    這篇文章主要介紹了MyBatis開發(fā)Dao層的兩種方式實(shí)現(xiàn)(原始Dao層開發(fā)),并對數(shù)據(jù)庫進(jìn)行增刪查改,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Java以編程方式實(shí)現(xiàn)JAR文件的創(chuàng)建

    Java以編程方式實(shí)現(xiàn)JAR文件的創(chuàng)建

    在這篇文章中,我們將為大家詳細(xì)介紹一下利用Java語言以編程方式創(chuàng)建jar文件的過程。文中的示例代碼講解詳細(xì),感興趣的可以了解一下
    2022-07-07
  • spring boot 開發(fā)soap webservice的實(shí)現(xiàn)代碼

    spring boot 開發(fā)soap webservice的實(shí)現(xiàn)代碼

    這篇文章主要介紹了spring boot 開發(fā)soap webservice的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2019-01-01
  • Java實(shí)現(xiàn)簡單的郵件發(fā)送功能

    Java實(shí)現(xiàn)簡單的郵件發(fā)送功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)簡單的郵件發(fā)送功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-07-07
  • MyBatis/mybatis-plus項(xiàng)目打印SQL的方法實(shí)現(xiàn)

    MyBatis/mybatis-plus項(xiàng)目打印SQL的方法實(shí)現(xiàn)

    SpringBoot項(xiàng)目中,經(jīng)常需要打印SQL語句及其參數(shù),本文就來介紹一下MyBatis/mybatis-plus項(xiàng)目打印SQL的方法實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-07-07
  • Logstash配置Java日志格式的方法小結(jié)

    Logstash配置Java日志格式的方法小結(jié)

    Logstash 是用于日志收集的開源工具,通常與 Elasticsearch 和 Kibana 一起使用,形成 ELK Stack,Logstash 非常靈活,可以通過配置文件(通常是 .conf 文件)來定義數(shù)據(jù)的輸入、處理和輸出,本文給大家介紹了Logstash配置Java日志格式的方法,需要的朋友可以參考下
    2024-09-09

最新評論