亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java實(shí)現(xiàn)人臉識(shí)別登錄、注冊(cè)等功能(最新完整版)

 更新時(shí)間:2022年05月13日 08:55:06   作者:派?大?星.  
這段時(shí)間由于學(xué)校實(shí)行靜態(tài)化管理,寢室門(mén)和校門(mén)都是用了人臉識(shí)別的裝置,本系列項(xiàng)目從設(shè)計(jì)到實(shí)現(xiàn)源碼全部開(kāi)源免費(fèi)學(xué)習(xí)使用,對(duì)Java實(shí)現(xiàn)人臉識(shí)別登錄、注冊(cè)功能感興趣的朋友一起看看吧

前言:

這段時(shí)間由于學(xué)校實(shí)行靜態(tài)化管理,寢室門(mén)和校門(mén)都是用了人臉識(shí)別的裝置,每次經(jīng)過(guò)都會(huì)激發(fā)我的好奇心,也想自己搞一個(gè)人臉識(shí)別玩玩,隨著開(kāi)始查找資料來(lái)研究這方面的信息,還好有好幾家公司都有提供這方面的免費(fèi)API,也是省下來(lái)很多功夫。一開(kāi)始采用的是face++,但是在執(zhí)行到最后一步人臉?biāo)阉鲿r(shí)出現(xiàn)問(wèn)題,一直提示INVALID_OUTER_ID,跟著官方文檔,一步步抽離再封裝,最終還是以失敗告終,無(wú)奈只能選擇放棄。接著輾轉(zhuǎn)第二家 百度AI ,這次還是比較順利的,中間只出現(xiàn)過(guò)一次錯(cuò)誤  ,而且官方大大還給出了解決方案,很是貼心,最終還是實(shí)現(xiàn)了開(kāi)始的預(yù)想:成功使用人臉來(lái)實(shí)現(xiàn)注冊(cè)和登錄功能。

本系列項(xiàng)目從設(shè)計(jì)到實(shí)現(xiàn)源碼全部開(kāi)源免費(fèi)學(xué)習(xí)使用,一起追向理想,歡迎各位大佬監(jiān)督打卡開(kāi)發(fā)!

難度分析:

由于使用的是百度云AI/face++這兩個(gè)平臺(tái)的現(xiàn)有的Api接口,所以分別對(duì)二者的難度進(jìn)行分析介紹:

  • face++

? 曠視face++的難度在于需要自己對(duì)官方提供的代碼段進(jìn)行獨(dú)立封裝,這就比較考驗(yàn)開(kāi)發(fā)者的代碼抽取能力和 自我獨(dú)立封裝的技能,如果不能很好地進(jìn)行抽取封裝,就會(huì)造成代碼的冗余以及內(nèi)存的浪費(fèi),這樣封裝的效 果并不能達(dá)到最佳。比較耗費(fèi)時(shí)間,在抽取face++平臺(tái)的代碼段時(shí)需要對(duì)IO流有著比較好的理解,從而讀取 讀取配置文件中的內(nèi)容,這里就不多做介紹。

  • 百度云AI

? 百度云AI可以讓開(kāi)發(fā)者對(duì)開(kāi)發(fā)難度有所選擇,因?yàn)樵撈脚_(tái)提供了兩種方式:第一種方式類(lèi)似于face++需要抽 取代碼然后進(jìn)行代碼封裝,難度分析見(jiàn)上述face++對(duì)分析;第二種方式則是百度云提供了Maven倉(cāng)庫(kù),可以 直接導(dǎo)入依賴(lài),直接調(diào)用相應(yīng)的Api進(jìn)行開(kāi)發(fā)即可!有較好的選擇性!

前端使用JQuery調(diào)用本地?cái)z像頭進(jìn)行拍攝(自我感覺(jué)這是最難的部分)

項(xiàng)目回顧(百度云AI)

最終效果演示:

在這里插入圖片描述

技術(shù)選型:

  • SpringBoot 
  • BootStrap
  • Thymeleaf
  •  百度云AI / Face++

項(xiàng)目需求分析

為了用戶(hù)登錄的便捷,不再輸入賬號(hào)密碼進(jìn)行手動(dòng)登錄與注冊(cè),而是使用JQuery調(diào)用本機(jī)的攝像頭進(jìn)行拍攝照片,然后調(diào)用人臉識(shí)別接口將人臉信息自動(dòng)注冊(cè)進(jìn)所使用的平臺(tái)(百度云/Face++)后,用戶(hù)即可進(jìn)行人臉掃描實(shí)現(xiàn)登錄操作。

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-DMRfhF6Z-1652173334791)(/Users/wumao/Documents/Typora筆記/typora-user-images/image-20220510155115622.png)]

項(xiàng)目搭建

1. 前期準(zhǔn)備 ① 進(jìn)入百度云的人臉識(shí)別控制臺(tái)

如果沒(méi)有百度賬號(hào)可以使用手機(jī)號(hào)快速進(jìn)行注冊(cè)進(jìn)入百度云AI控制臺(tái)

②創(chuàng)建人臉識(shí)別應(yīng)用

【1】創(chuàng)建應(yīng)用

在這里插入圖片描述

【2】可以選擇自己想要使用的接口:比如人臉識(shí)別、語(yǔ)音技術(shù)等,本次項(xiàng)目采用的是人臉識(shí)別,官方也默認(rèn)選擇了人臉識(shí)別的全部接口,所以也不需要做改動(dòng),只需要填寫(xiě)應(yīng)用名稱(chēng)即可!

在這里插入圖片描述

【3】獲取秘鑰

在這里插入圖片描述

2. 測(cè)試百度云API

① 導(dǎo)入依賴(lài)

<dependency>
  <groupId>com.baidu.aip</groupId>
  <artifactId>java-sdk</artifactId>
  <version>4.9.0</version>
</dependency>

② 測(cè)試部分API(人臉注冊(cè)、人臉檢測(cè)、人臉?biāo)阉鞯龋?/p>

人臉注冊(cè)

用于從人臉庫(kù)中新增用戶(hù),可以設(shè)定多個(gè)用戶(hù)所在組及組內(nèi)用戶(hù)的人臉圖片

典型應(yīng)用場(chǎng)景:構(gòu)建屬于自己人臉庫(kù),比如:會(huì)員人臉注冊(cè)、已有用戶(hù)補(bǔ)全人臉信息

測(cè)試代碼

//人臉注冊(cè)
@Test
public void testFaceRegister() throws IOException {
  //1. 創(chuàng)建Java代碼和百度云交互的Client對(duì)象
  AipFace client = new AipFace("AppId","Api_key","Api_secret");
  //2. 參數(shù)設(shè)置(示例下表格對(duì)參數(shù)進(jìn)行介紹)
  HashMap<String,String> map = new HashMap<>();
  map.put("quality_control","NORMAL");//圖片質(zhì)量
  map.put("liveness_control","LOW");//活體檢測(cè)
  //3. 構(gòu)造圖片
  String path = "本地圖片路徑";
  //上傳的圖片  兩種格式:url地址 Base64字符串形式
  byte[] bytes = Files.readAllBytes(Paths.get(path));
  String encode = Base64Util.encode(bytes);
  //4.調(diào)用api方法完成人臉注冊(cè)
  /**
  * 參數(shù)1:圖片的url或者base64字符串
  * 參數(shù)2:圖片形式(URL,BASE64)
  * 參數(shù)3:組Id(固定一個(gè)字符串)
  * 參數(shù)4:用戶(hù)Id
  * 參數(shù)5:hashMap基本參數(shù)配置
  */
  JSONObject res = client.addUser(encode, "BASE64", "pdx", "1000", map);
  System.out.println(res.toString());
}

測(cè)試結(jié)果:只要最后error_code為0則表示測(cè)試成功,后續(xù)封裝代碼也是需要判斷error_code的值

[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機(jī)制,建議將圖片保存下來(lái)直接上傳(img-noSP5q2r-1652173334793)(/Users/wumao/Documents/Typora筆記/typora-user-images/image-20220510141916574.png)]

參數(shù)介紹:

參數(shù)名稱(chēng)是否必選類(lèi)型默認(rèn)值說(shuō)明
imageString 圖片信息(總數(shù)據(jù)大小應(yīng)小于10M),圖片上傳方式根據(jù)image_type來(lái)判斷
image_typeString 圖片類(lèi)型BASE64:圖片的base64值,base64編碼后的圖片數(shù)據(jù),編碼后的圖片大小不超過(guò)2M;URL:圖片的 URL地址( 可能由于網(wǎng)絡(luò)等原因?qū)е孪螺d圖片時(shí)間過(guò)長(zhǎng));FACE_TOKEN: 人臉圖片的唯一標(biāo)識(shí),調(diào)用人臉檢測(cè)接口時(shí),會(huì)為每個(gè)人臉圖片賦予一個(gè)唯一的FACE_TOKEN,同一張圖片多次檢測(cè)得到的FACE_TOKEN是同一個(gè)。
face_fieldstring age,expression,face_shape,gender,glasses,landmark,landmark150,quality,eye_status,emotion,face_type,mask,spoofing信息逗號(hào)分隔. 默認(rèn)只返回face_token、人臉框、概率和旋轉(zhuǎn)角度
max_face_numuint32 最多處理人臉的數(shù)目,默認(rèn)值為1,根據(jù)人臉檢測(cè)排序類(lèi)型檢測(cè)圖片中排序第一的人臉(默認(rèn)為人臉面積最大的人臉),最大值120
face_typestring 人臉的類(lèi)型LIVE表示生活照:通常為手機(jī)、相機(jī)拍攝的人像圖片、或從網(wǎng)絡(luò)獲取的人像圖片等
IDCARD表示身份證芯片照:二代身份證內(nèi)置芯片中的人像照片WATERMARK表示帶水印證件照:一般為帶水印的小圖,如公安網(wǎng)小圖CERT表示證件照片:如拍攝的身份證、工卡、護(hù)照、學(xué)生證等證件圖片默認(rèn)LIVE

人臉檢測(cè)

判斷圖片是否具有面部信息

測(cè)試代碼

    @Test
    public void testFaceCheck() throws IOException {
        //1. 創(chuàng)建Java代碼和百度云交互的Client對(duì)象
        AipFace client = new AipFace("AppId","Api_key","Api_secret");
        //2. 構(gòu)造圖片
        String path = "本地圖片路徑";
        //上傳的圖片  兩種格式:url地址 Base64字符串形式
        byte[] bytes = Files.readAllBytes(Paths.get(path));
        String encode = Base64Util.encode(bytes);
        //調(diào)用Api方法進(jìn)行人臉檢測(cè)
        /**
         * 參數(shù)1:圖片的url或者base64字符串
         * 參數(shù)2:圖片形式(URL,BASE64)
         * 參數(shù)3:hashMap中的基本參數(shù)配置(null:使用默認(rèn)配置)
         */
        JSONObject res = client.detect(encode, "BASE64", null);
        System.out.println(res.toString(2));
    }

測(cè)試結(jié)果:

在這里插入圖片描述

參數(shù)介紹:

參數(shù)名稱(chēng)是否必選類(lèi)型默認(rèn)值說(shuō)明
imageString 圖片信息(總數(shù)據(jù)大小應(yīng)小于10M),圖片上傳方式根據(jù)image_type來(lái)判斷
image_typeString 圖片類(lèi)型BASE64:圖片的base64值,base64編碼后的圖片數(shù)據(jù),編碼后的圖片大小不超過(guò)2M;URL:圖片的 URL地址( 可能由于網(wǎng)絡(luò)等原因?qū)е孪螺d圖片時(shí)間過(guò)長(zhǎng));FACE_TOKEN: 人臉圖片的唯一標(biāo)識(shí),調(diào)用人臉檢測(cè)接口時(shí),會(huì)為每個(gè)人臉圖片賦予一個(gè)唯一的FACE_TOKEN,同一張圖片多次檢測(cè)得到的FACE_TOKEN是同一個(gè)。
face_fieldstring age,expression,face_shape,gender,glasses,landmark,landmark150,quality,eye_status,emotion,face_type,mask,spoofing信息逗號(hào)分隔. 默認(rèn)只返回face_token、人臉框、概率和旋轉(zhuǎn)角度
max_face_numuint32 最多處理人臉的數(shù)目,默認(rèn)值為1,根據(jù)人臉檢測(cè)排序類(lèi)型檢測(cè)圖片中排序第一的人臉(默認(rèn)為人臉面積最大的人臉),最大值120
face_typestring 人臉的類(lèi)型LIVE表示生活照:通常為手機(jī)、相機(jī)拍攝的人像圖片、或從網(wǎng)絡(luò)獲取的人像圖片等
IDCARD表示身份證芯片照:二代身份證內(nèi)置芯片中的人像照片WATERMARK表示帶水印證件照:一般為帶水印的小圖,如公安網(wǎng)小圖CERT表示證件照片:如拍攝的身份證、工卡、護(hù)照、學(xué)生證等證件圖片默認(rèn)LIVE

人臉?biāo)阉?/strong>

根據(jù)用戶(hù)上傳的圖片和指定人臉庫(kù)中的所有人臉進(jìn)行比較,獲取相似度最高的一個(gè)或者某幾個(gè)的評(píng)分

返回值(數(shù)據(jù),只需要第一條,相似度最高的數(shù)據(jù))score:相似度評(píng)分(80分以上可以認(rèn)為是同一個(gè)人

測(cè)試代碼:

    @Test
    public void testFaceSearch() throws IOException {
        //1. 創(chuàng)建Java代碼和百度云交互的Client對(duì)象
				AipFace client = new AipFace("AppId","Api_key","Api_secret");
        //2. 構(gòu)造圖片
        String path = "本地圖片路徑";
        //上傳的圖片  兩種格式:url地址 Base64字符串形式
        byte[] bytes = Files.readAllBytes(Paths.get(path));
        String encode = Base64Util.encode(bytes);
        //人臉?biāo)阉?
        JSONObject res = client.search(encode, "BASE64", "pdx", null);
        System.out.println(res.toString(2));
    }

測(cè)試結(jié)果:

在這里插入圖片描述

小結(jié):

整體測(cè)試下來(lái),和平常對(duì)數(shù)據(jù)庫(kù)的操作類(lèi)似,都是增刪改查的操作,除了這些Api,還有其他的就不再贅述了,操作類(lèi)似!所有測(cè)試代碼也會(huì)同項(xiàng)目案例一并上傳到Gitee倉(cāng)庫(kù)中!

3. 搭建項(xiàng)目(使用Thymeleaf模板引擎)

① 創(chuàng)建Maven項(xiàng)目

引入相關(guān)依賴(lài),構(gòu)建所需文件目錄

在這里插入圖片描述

② 編寫(xiě)properties配置文件

ai.appId="api_id"
ai.apiKey="api_key"
ai.secretKey="api_secret"
ai.imageType=BASE64
ai.groupId="自定義組"
server.max-http-header-size=1000KB
spring.thymeleaf.cache=false

③ 展示對(duì)上述部分Api接口進(jìn)行二次封裝

    private AipFace client;
    private HashMap<String,String> map = new HashMap<>();
    private BaiduAiUtils(){
        map.put("quality_control","NORMAL");//圖片質(zhì)量
        map.put("liveness_control","LOW");//活體檢測(cè)
    }
    @PostConstruct
    public void init(){
        client = new AipFace(APP_ID,API_KEY,SECRET_KEY);
    }
    /**
     * 人臉注冊(cè),將用戶(hù)照片存入人臉庫(kù)中
     * @param userId
     * @param image
     * @return
     */
    public Boolean faceRegister(String userId,String image){
        //人臉注冊(cè)
        JSONObject res = client.addUser(image, IMAGE_TYPE, groupId, userId, map);
        Integer errorCode = res.getInt("error_code");
        return errorCode == 0? true : false;
    }
    /**
     * 人臉更新,更新人臉庫(kù)中的用戶(hù)照片
     * @param userId
     * @param image
     * @return
     */
    public Boolean faceUpdate(String userId,String image){
        //人臉更新
        JSONObject res = client.updateUser(image, IMAGE_TYPE, groupId, userId, map);
        Integer errorCode = res.getInt("error_code");
        return errorCode == 0 ? true : false;
    }

想要了解全部封裝代碼請(qǐng)移步Gittee倉(cāng)庫(kù)

④ 編寫(xiě)Controller前端控制器代碼

首選創(chuàng)建一個(gè)FaceLoginController類(lèi)

跳轉(zhuǎn)到人臉登錄頁(yè)面的控制器

@RequestMapping("/")
public String toLogin(){
  return "index";
}

實(shí)現(xiàn)人臉登錄邏輯

/**
 * 人臉登錄
 * @return
 * @throws Exception
 */
@RequestMapping("/face-login")
@ResponseBody
public  String searchface(@RequestBody @RequestParam(name = "imagebast64") StringBuffer imagebast64, HttpServletRequest request) throws Exception {
    String userId = faceLoginService.loginByFace(imagebast64);
    request.getSession().setAttribute("userId",userId);
    request.getSession().setAttribute("username","派大星");
    return userId;
}

實(shí)現(xiàn)人臉登錄業(yè)務(wù)邏輯層

在這里插入圖片描述

由于在封裝接口時(shí)設(shè)定的imageType為Base64,所以在實(shí)現(xiàn)前端拍照時(shí)使用的是Canvas Api提供了toDataURL()方法將畫(huà)布中的圖形轉(zhuǎn)換為圖片,而默認(rèn)情況下,toDataURL()方法把圖形轉(zhuǎn)變成Base64編碼格式的png,其格式為data:image/png;base64,xxxxx,而,后面的內(nèi)容才是接口中需要的部分,所以需要對(duì)字符串進(jìn)行切割處理。前端部分具體見(jiàn)下圖:

在這里插入圖片描述

注意事項(xiàng)(項(xiàng)目搭建前了解)

① 出現(xiàn)qps不足如何解決

Open api qps request limit reached

這個(gè)問(wèn)題官方也給出了具體的解決方案,在百度云控制臺(tái)可以免費(fèi)領(lǐng)取測(cè)試額度,也是對(duì)開(kāi)發(fā)者的一個(gè)福利。

在這里插入圖片描述

此處貼上免費(fèi)資源領(lǐng)取地址

② oauth 獲取錯(cuò)誤

0 [main] WARN com.baidu.aip.client.BaseClient  - oauth get error, current state: STATE_TRUE_CLOUD_USER
{
  "error_msg": "IAM Certification failed",
  "error_code": 14
}

具體原因:

仔細(xì)檢查:APP_ID、API_KEY、SECRET_KEY字符串中是否有空格

項(xiàng)目總結(jié)

使用百度云AI把項(xiàng)目整體搭建下來(lái),可以很完美的實(shí)現(xiàn)最終的效果,人臉的識(shí)別速度也是相當(dāng)迅速的,一些細(xì)節(jié)處理的特別到位,比如:在進(jìn)行人臉識(shí)別的過(guò)程中眼睛必須對(duì)準(zhǔn)攝像頭,當(dāng)你的眼睛有所阻礙時(shí),會(huì)提示的某眼處有阻礙等等。但是在并發(fā)方面支持的并不是很到位!

新鮮出爐的代碼將會(huì)及時(shí)更新到Gitee倉(cāng)庫(kù)

以上代碼屬于部分實(shí)現(xiàn),想要了解完整版請(qǐng)移步派大星的Gitee倉(cāng)庫(kù)

到此這篇關(guān)于Java實(shí)現(xiàn)人臉登錄、注冊(cè)等功能的文章就介紹到這了,更多相關(guān)Java人臉登錄、注冊(cè)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 詳解spring cloud eureka注冊(cè)中心

    詳解spring cloud eureka注冊(cè)中心

    這篇文章主要介紹了詳解spring cloud eureka注冊(cè)中心,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07
  • 微服務(wù)下springboot?多模塊打包使用詳解

    微服務(wù)下springboot?多模塊打包使用詳解

    這篇文章主要介紹了springboot多模塊打包使用詳解,牽涉到很多與maven相關(guān)的技術(shù)點(diǎn),比如maven的版本管理,依賴(lài)傳遞,父子模塊繼承,以及maven打包插件等眾多的內(nèi)容相互交織在一起,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-07-07
  • spring?boot前后端交互之?dāng)?shù)據(jù)格式轉(zhuǎn)換問(wèn)題

    spring?boot前后端交互之?dāng)?shù)據(jù)格式轉(zhuǎn)換問(wèn)題

    這篇文章主要介紹了spring?boot前后端交互之?dāng)?shù)據(jù)格式轉(zhuǎn)換,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-01-01
  • Java通過(guò)Lambda函數(shù)的方式獲取屬性名稱(chēng)

    Java通過(guò)Lambda函數(shù)的方式獲取屬性名稱(chēng)

    這篇文章主要介紹了通過(guò)Lambda函數(shù)的方式獲取屬性名稱(chēng),實(shí)現(xiàn)步驟是通過(guò)定義一個(gè)函數(shù)式接口, 用來(lái)接收l(shuí)ambda方法引用,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-10-10
  • 鏈表的原理及java實(shí)現(xiàn)代碼示例

    鏈表的原理及java實(shí)現(xiàn)代碼示例

    這篇文章主要介紹了鏈表的原理及java實(shí)現(xiàn)代碼示例,涉及單向鏈表的基本介紹,單向鏈表的Java實(shí)現(xiàn)代碼分享等相關(guān)內(nèi)容,具有一定參考價(jià)值,需要的朋友可以參考下。
    2017-11-11
  • springboot集成mybatis?plus和dynamic-datasource注意事項(xiàng)說(shuō)明

    springboot集成mybatis?plus和dynamic-datasource注意事項(xiàng)說(shuō)明

    這篇文章主要介紹了springboot集成mybatis?plus和dynamic-datasource注意事項(xiàng)說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • Java 實(shí)戰(zhàn)項(xiàng)目錘煉之在線(xiàn)蛋糕商城系統(tǒng)的實(shí)現(xiàn)

    Java 實(shí)戰(zhàn)項(xiàng)目錘煉之在線(xiàn)蛋糕商城系統(tǒng)的實(shí)現(xiàn)

    讀萬(wàn)卷書(shū)不如行萬(wàn)里路,只學(xué)書(shū)上的理論是遠(yuǎn)遠(yuǎn)不夠的,只有在實(shí)戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+jsp+jdbc+mysql實(shí)現(xiàn)一個(gè)在線(xiàn)蛋糕商城系統(tǒng),大家可以在過(guò)程中查缺補(bǔ)漏,提升水平
    2021-11-11
  • Java?實(shí)現(xiàn)訂單未支付超時(shí)自動(dòng)取消功能(京東商城為例)

    Java?實(shí)現(xiàn)訂單未支付超時(shí)自動(dòng)取消功能(京東商城為例)

    本文以京東網(wǎng)上商城為例,給大家介紹商品在下單后沒(méi)有支付的情況下,超時(shí)自動(dòng)取消功能,超過(guò)24小時(shí),就會(huì)自動(dòng)取消訂單,下面使用 Java 定時(shí)器實(shí)現(xiàn)超時(shí)取消訂單功能,感興趣的朋友一起看看吧
    2022-01-01
  • 淺析JavaMail發(fā)送郵件后再通過(guò)JavaMail接收格式問(wèn)題

    淺析JavaMail發(fā)送郵件后再通過(guò)JavaMail接收格式問(wèn)題

    這篇文章主要介紹了JavaMail發(fā)送郵件后再通過(guò)JavaMail接收格式問(wèn)題 ,本文通過(guò)代碼實(shí)例給大家詳細(xì)解說(shuō),需要的朋友可以參考下
    2019-06-06
  • 搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn)

    搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn)

    本文主要介紹了搭建Spring MVC和Vue3的應(yīng)用程序的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-11-11

最新評(píng)論