Axios與Java Spring構建RESTful API服務集成指南

1 前后端分離時代的技術選擇

現在的Web開發,前后端分離已經不是什么新鮮事了。前端用什么?很多團隊選擇Axios。后端呢?Java Spring依然是企業級應用的首選。

Axios這個JavaScript庫確實好用,Promise-based的設計讓異步請求變得簡單。Java Spring框架在后端領域的地位就更不用說了,穩定、功能強大,特別是Spring Boot出現后,配置工作量大幅減少。

本文會詳細講解Axios怎么發請求,Spring怎么接收處理,涵蓋常見的CRUD操作、搜索功能,還有批量處理這些實際開發中經常遇到的場景。


1.1 為什么選擇Axios

Axios在前端HTTP庫中算是佼佼者,原因很簡單:

異步數據交互方面,Axios讓Ajax請求變得輕松,和后端RESTful API對接毫無壓力。跨域請求支持是原生的,不用額外配置就能處理CORS問題。

請求/響應攔截器這個功能特別實用,可以在請求發出前統一添加token,或者在響應回來后統一處理錯誤。API設計也很人性化,上手快,配置選項豐富。

1.2 Spring框架的企業級優勢

Spring Boot的出現改變了Java后端開發的游戲規則。

約定優于配置這個理念讓開發者從繁瑣的XML配置中解脫出來。想要RESTful API?幾個注解就搞定。需要集成數據庫、安全認證、消息隊列?各種Starter POMs讓這些變得簡單。

配合Spring Cloud,微服務架構也不再是難題。這就是為什么這么多企業選擇Spring的原因。


2 HTTP方法與RESTful設計

理解HTTP方法是做好RESTful API的基礎。每個方法都有自己的用途和特點。

2.1 核心HTTP方法解析

GET - 獲取數據用的,參數放在URL里,冪等且安全,但不適合傳敏感信息,瀏覽器會緩存
POST - 提交數據,創建資源,數據放在請求體里,非冪等
PUT - 更新資源,替換整個資源,冪等
DELETE - 刪除資源,冪等

這些方法對應著數據的增刪改查操作,遵循RESTful設計原則。


3 Axios與Spring Boot基礎對接

3.1 Axios快速上手

安裝很簡單:

npm install axios
# 或者
yarn add axios

基本用法:

import axios from 'axios';axios.get('http://localhost:8080/api/data').then(response => {console.log(response.data);}).catch(error => {console.error("獲取數據失敗", error);});

3.2 Spring Boot項目搭建

環境要求:JDK 8+,Maven或Gradle。

用Spring Initializr (https://start.spring.io/) 生成項目骨架最方便。

寫個簡單的Controller:

import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;@RestController
public class DataController {@GetMapping("/api/data")public String getData() {return "Hello from Spring Boot!";}
}

運行項目:mvn spring-boot:rungradlew bootRun


4 實戰場景詳解

4.1 刪除單個資源(路徑參數)

這是最標準的RESTful刪除方式。

前端代碼:

axios.delete(`/delete/${id}`).then(response => {console.log('刪除成功', response.data);}).catch(error => {console.error('刪除失敗', error);});

后端代碼:

@DeleteMapping("/delete/{id}")
public ResponseEntity<String> deleteResource(@PathVariable("id") Long id) {service.deleteById(id);return ResponseEntity.ok("ID為 " + id + " 的資源已刪除");
}

4.2 刪除資源(查詢參數方式)

有時候需要通過查詢參數傳遞ID。

前端代碼:

axios.get('/delete', { params: { id: 11 } }).then(response => {console.log('刪除成功', response.data);}).catch(error => {console.error('刪除失敗', error);});

后端代碼:

@GetMapping("/delete")
public ResponseEntity<String> deleteResourceById(@RequestParam("id") Long id) {service.deleteById(id);return ResponseEntity.ok("ID為 " + id + " 的資源已刪除");
}

注意: 實際項目中別用GET做刪除操作,不符合REST規范,而且有安全風險。

4.3 更新資源(POST方式)

前端代碼:

axios.post('/update', { id: 1 }).then(response => {console.log('更新成功', response.data);}).catch(error => {console.error('更新失敗', error);});

后端代碼:

@PostMapping("/update")
public ResponseEntity<String> updateResource(@RequestBody ResourceUpdateRequest request) {Long id = request.getId();service.updateResource(id);return ResponseEntity.ok("ID為 " + id + " 的資源已更新");
}

4.4 完整更新資源(PUT方式)

PUT用于完整替換資源。

前端代碼:

axios.put('/update', { id: 1, newName: '新名稱' }).then(response => {console.log('更新成功', response.data);}).catch(error => {console.error('更新失敗', error);});

后端代碼:

@PutMapping("/update")
public ResponseEntity<String> updateResourceCompletely(@RequestBody ResourceUpdateRequest request) {Long id = request.getId();String newName = request.getNewName();service.updateResourceCompletely(id, newName);return ResponseEntity.ok("ID為 " + id + " 的資源已完全更新");
}

4.5 創建新資源

前端代碼:

axios.post('/create', { name: '新資源' }).then(response => {console.log('創建成功', response.data);}).catch(error => {console.error('創建失敗', error);});

后端代碼:

@PostMapping("/create")
public ResponseEntity<ResourceCreatedResponse> createNewResource(@RequestBody NewResourceRequest request) {String resourceName = request.getName();ResourceCreatedResponse response = service.createNewResource(resourceName);return ResponseEntity.status(HttpStatus.CREATED).body(response);
}

4.6 搜索功能實現

搜索通常用GET請求,參數通過URL傳遞。

前端代碼:

axios.get('/search', { params: { keyword: '關鍵詞' } }).then(response => {console.log('搜索結果:', response.data);}).catch(error => {console.error('搜索失敗', error);});

后端代碼:

@GetMapping("/search")
public ResponseEntity<List<Resource>> searchResources(@RequestParam("keyword") String keyword) {List<Resource> results = service.searchByKeyword(keyword);return ResponseEntity.ok(results);
}

4.7 批量刪除操作

批量操作需要傳遞多個ID,用DELETE請求體。

前端代碼:

axios.delete('/batchDelete', { data: [{ id: 1 }, { id: 2 }] }).then(response => {console.log('批量刪除成功', response.data);}).catch(error => {console.error('批量刪除失敗', error);});

后端代碼:

@DeleteMapping("/batchDelete")
public ResponseEntity<String> batchDeleteResources(@RequestBody List<Long> ids) {service.batchDelete(ids);return ResponseEntity.ok("ID為 " + ids + " 的資源已批量刪除");
}

提醒: Axios的delete方法默認不支持請求體,要用axios({ method: 'delete', url: '/...', data: yourData })這種寫法。


5 HTTP方法與注解對應關系

5.1 各種請求的處理方式

GET請求 - 獲取資源或搜索,用@GetMapping + @PathVariable@RequestParam
POST請求 - 創建資源或提交數據,用@PostMapping + @RequestBody
PUT請求 - 完整更新資源,用@PutMapping + @RequestBody
DELETE請求 - 刪除資源,用@DeleteMapping + @PathVariable@RequestBody


6 開發中的注意事項

6.1 安全方面的考慮

別用GET做修改操作
GET請求可能被瀏覽器預加載、緩存,或者留在瀏覽歷史里。修改數據要用POST、PUT、DELETE。

敏感數據要加密
不管用什么HTTP方法,敏感數據傳輸都要用HTTPS。

做好認證和授權
OAuth、JWT這些認證機制要用起來,確保只有合法用戶能訪問和修改數據。

6.2 性能優化建議

異步處理
前端用Ajax異步請求,避免頁面刷新,用戶體驗更好。后端也可以用異步編程處理耗時操作。

緩存策略
靜態資源和不常變的數據要設置緩存,ETag、Last-Modified、Cache-Control這些HTTP頭要用好。

分頁和懶加載
大量數據要分頁顯示,需要時再加載,減少首次加載時間。

數據壓縮
開啟GZIP壓縮,特別是文本數據,能明顯減少傳輸量。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/98072.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/98072.shtml
英文地址,請注明出處:http://en.pswp.cn/web/98072.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Django ORM多對多關系實戰指南

一、Django 多對多關系的原理 在關系型數據庫中&#xff0c;多對多關系通常需要 第三張中間表 來維護兩張表之間的對應關系。 在 Django 中&#xff0c;你只需要定義 ManyToManyField&#xff0c;Django 會自動幫你創建這張中間表。 特點&#xff1a; 可以雙向查詢&#xff08;…

STM32 單片機開發 - TIM 定時器(PWM)

一、硬件定時器高級控制定時器 Advanced Control Timers (TIM1/TIM8)通用定時器 General Purpose Timers (TIM2/TIM3/TIM4/TIM5)通用定時器 General Purpose Timers (TIM15/TIM16/TIM17)基本定時器 Basic Timers (TIM6/TIM7)表 1 定時器種類二、TIM 中 PWM 概念PWM 的基本原理就…

OpenCV內置分類器實現簡單的人臉識別

引言 人臉檢測是計算機視覺領域的基礎任務之一&#xff0c;廣泛應用于安防監控、人機交互、圖像美化等場景。今天我們將通過一段簡潔的Python代碼&#xff0c;使用OpenCV庫實現實時攝像頭人臉檢測功能。無論你是計算機視覺新手還是有經驗的開發者&#xff0c;這篇文章都能幫你理…

Tomcat 性能優化與高并發調優

Tomcat 性能優化與高并發調優1. 引言 經過前幾篇文章的學習&#xff0c;我們已經掌握了 Tomcat 的核心原理&#xff1a; Connector 連接器容器體系&#xff08;Engine → Host → Context → Wrapper&#xff09;Servlet 執行鏈路線程模型&#xff08;Executor Worker&#xf…

MacOS M1安裝face_recognition

MacOS M1安裝face_recognition一致失敗&#xff0c;嘗試網上各種方法還是失敗&#xff0c;遂分享自己安裝成功的經歷。 conda虛擬環境python版本&#xff1a;3.9.23準備工作確保 Homebrew 已安裝 Homebrew 是 macOS 的包管理器&#xff0c;用于安裝依賴項。如果尚未安裝&#x…

動態庫和靜態庫的鏈接加載

靜態庫的鏈接與加載靜態庫&#xff08;如.a或.lib文件&#xff09;在編譯時直接鏈接到可執行文件中。編譯器會將靜態庫中實際用到的代碼復制到最終的可執行文件&#xff0c;生成獨立的二進制文件。優點是不依賴外部庫文件&#xff0c;但會導致可執行文件體積較大。生成靜態庫的…

如何處理在pytorch環境中已經安裝的matplotlib無法使用的問題

1 問題已經安裝好的matplotlib包無法在pytorch環境中使用。2 方法方法一&#xff1a;用命令安裝matplotlib &#xff1a;方法二&#xff1a;打開cmd&#xff0c;使用conda install matplotlib命令安裝matplotlib庫#輸入以下代碼段&#xff0c;查詢當前執行路徑import osos.sys.…

Linux基礎命令匯總

系統基礎指令 ls:列出目錄內容 ls -a:顯示所有文件(包括隱藏文件) ls -l:顯示詳細文件信息 ls /etc:列出 /etc 目錄內容 示例: cat:查看文件內容 cat /etc/os-release:查看系統版本信息 cat file1:顯示文件內容 cat file1 file2 > merged.txt:合并文件并輸出到新…

一場史詩級的冒險——Docker命令大航海!

各位親愛的開發者、運維勇士、以及所有對現代化軟件部署充滿好奇的小伙伴們&#xff01;今天&#xff0c;我們將開啟一場史詩級的冒險——Docker命令大航海&#xff01;我們將乘坐“Docker號”巨輪&#xff0c;駛向容器化技術的星辰大海。 這不是一篇枯燥的說明書&#xff0c;而…

告別依賴混亂:Spring IoC 容器與 DI 依賴注入入門精講

目錄 什么是 IoC IoC 介紹 傳統開發思路 解決方法 IoC 優勢 DI IoC & DI 使用 IoC 詳解 Bean 的存儲 Controller&#xff08;控制器存儲&#xff09; 獲取 bean 對象的其他方法 bean 命名 面試題之 ApplicationContext pk BeanFactory Service&#xff08;服…

視頻理解學習筆記

目錄 VideoRefer VideoPrism 核心解密&#xff1a;通用視頻編碼器的力量 VideoRefer VideoRefer 是由浙江大學和阿里達摩院聯合推出的視頻對象感知與推理技術&#xff0c;增強視頻大型語言模型&#xff08;Video LLMs&#xff09;的空間-時間理解能力。簡單一點來說就是可以…

P1198題解

題目鏈接 開題第一件事看數據范圍.這里的范圍是二十萬,支持O(nlogn). 這是一個RMQ問題,同時要加點,我們因此考慮ST表或者線段樹.這里用線段樹是核彈打蚊子,沒有意義,我們因此考慮ST表.我們注意到如果加點操作需要改動ST表原來的東西ST表就會炸掉,我們就要考慮更高級的數據結構…

使用yolov8對視頻進行目標檢測

使用 Ultralytics 的 YOLO 模型對視頻進行逐幀目標檢測非常簡單&#xff0c;以下是完整的實現方法&#xff1a; 我們的輸入視頻是這樣的 視頻目標檢測輸入視頻這里是天津市和平區天津大學附近&#xff0c;感興趣的小伙伴來天津玩哈&#xff01;&#xff01; 1. 安裝依賴 確保已…

Edge瀏覽器的自動化點擊系統

Tag_click_openclose_V6 開發與使用注意事項 網頁自動化點擊系統 一個基于Python和CustomTkinter開發的桌面應用程序&#xff0c;通過Selenium實現對Edge瀏覽器的自動化控制。點擊Tag_click_openclose_V6進入Github自取&#xff0c;記得點贊收藏嗷。 功能介紹 連接到已打開…

Python股票數據分析與預測系統 LSTM神經網絡算法 股票價格預測 Tensorflow深度學習 機器學習 Flask框架 東方財富(建議收藏)?

博主介紹&#xff1a;?全網粉絲50W&#xff0c;前互聯網大廠軟件研發、集結碩博英豪成立軟件開發工作室&#xff0c;專注于計算機相關專業項目實戰6年之久&#xff0c;累計開發項目作品上萬套。憑借豐富的經驗與專業實力&#xff0c;已幫助成千上萬的學生順利畢業&#xff0c;…

英萊科技焊縫跟蹤系統亮相德國埃森焊接展,激光視覺點亮世界舞臺

9月15-19日&#xff0c;每4年一屆的德國埃森焊接與切割展覽會&#xff08;SCHWEISSEN & SCHNEIDEN&#xff09;即將盛大開幕。作為焊接行業最具規模及權威性的盛會之一&#xff0c;英萊科技將攜全新PF系列激光視覺焊縫跟蹤系統驚艷亮相&#xff0c;為全球智能化焊接貢獻中國…

嵌入式基本概念:什么是指令集,微架構,IDE,DFP等等是什么意思,有什么關系???

注&#xff1a;下面是指令集和微框架的分類圖&#xff0c;后面我會以ARM的M4舉例子。 一.什么是指令集 大概的可以看這個視頻 https://www.bilibili.com/video/BV1uXzbYBEy2/?spm_id_from333.1007.top_right_bar_window_custom_collection.content.click&vd_source406ed…

Spring Cloud之服務入口Gateway之自定義過濾器

目錄 過濾器執行順序 自定義過濾器 自定義GatewayFilter 定義GatewayFilter 配置過濾器 啟動服務并訪問 自定義GlobalFilter 定義GlobalFilter 啟動服務并訪問 服務部署 過濾器執行順序 如果?個項?中, 既有GatewayFilter, ?有 GlobalFilter時, 執?的先后順序是什…

MySQL——視圖、儲儲過程、觸發器

目錄 一、視圖 二、存儲過程 三、觸發器 一、視圖 視圖是一種虛擬存在的表。視圖中的數據并不在數據庫中真實存在&#xff0c;行和列數據來自定義視圖的查詢中使用的表&#xff0c;并且是在使用視圖時動態生成的。通俗的講&#xff0c;視圖只保存了查詢的SQL邏輯&#xff0c…

iOS App 卡頓與性能瓶頸排查實戰 如何定位CPU內存GPU幀率問題、優化耗電與網絡延遲(uni-app開發性能優化全流程指南)

在 iOS 應用開發中&#xff0c;卡頓 是用戶最直觀的負面體驗。 一個 App 如果在頁面切換、滾動、后臺運行時頻繁掉幀或發熱&#xff0c;用戶很快就會放棄使用。 對于 uni-app 跨平臺開發者 來說&#xff0c;卡頓問題更為復雜&#xff1a; JS 與原生層橋接增加了 CPU 負載&#…