Vue + Spring Boot 前后端交互實踐:正確使用 `Content-Type: application/json` 及參數傳遞方式

在前后端分離開發中,前端通過 HTTP 請求與后端進行數據交互是常見的操作。其中,Content-Type 是決定請求體格式的重要字段之一。本文將以一個具體的例子出發,講解如何在 Vue 前端 使用 Axios 發送 JSON 格式請求,并在 Spring Boot 后端 正確接收參數。

我們將分析如下代碼是否合理:

axios.post('/api/login2', id, {headers: {'Content-Type': 'application/json'}
});

對應的后端接口為:

@PostMapping("/login2")
public ResponseEntity<?> login2(@RequestBody Long id) {return ResponseEntity.ok("Received: " + id);
}

一、整體結構是否正確?

模塊是否正確說明
請求方式?使用 axios.post 發送 POST 請求
接口路徑?/api/login2 路徑匹配后端 @PostMapping("/login2")
Content-Type 設置?明確設置為 'application/json'
后端接收方式?使用 @RequestBody Long id 正確接收 JSON 數據

? 結論:該寫法在語法上是正確的,可以正常工作。


二、詳細分析前后端交互過程

1. 前端發送原始值作為請求體(如數字或字符串)

前端傳入的是一個原始類型(如 id = 123),Axios 會自動將其序列化為 JSON 字符串發送:

123

這是合法的 JSON 格式,但不常見。通常我們更傾向于使用對象形式傳遞參數。

2. 后端接收原始值作為請求體

Spring Boot 支持將 JSON 的原始值綁定到基本類型或包裝類,例如:

@RequestBody Long id

如果接收到的數據是:

123

Spring Boot 會成功將其轉換為 Long 類型的變量。


三、潛在問題與建議

雖然上述寫法在技術上可行,但在實際項目開發中并不推薦。以下是幾個需要注意的問題和改進建議:

1. ? 不推薦使用原始值作為請求體

JSON 雖然允許直接傳輸原始值(如 "123"truenull),但這不符合 RESTful API 設計規范,也不利于后期維護和擴展。

? 更推薦的做法:使用對象形式傳遞參數
const id = 123;axios.post('/api/login2', { id });

此時發送的數據為:

{"id": 123
}

對應地,后端也應該改為接收一個對象:

public class LoginRequest {private Long id;// getter and setter
}@PostMapping("/login2")
public ResponseEntity<?> login2(@RequestBody LoginRequest request) {return ResponseEntity.ok("Received ID: " + request.getId());
}

這樣不僅結構清晰,也便于未來添加更多字段。


2. ?? 注意類型一致性

  • 如果前端傳入的是字符串 '123',而后端期望的是 Long,可能會拋出類型轉換異常。
  • 建議統一使用 String 類型,或者確保數值在 Long 范圍內。

3. ? Axios 默認已設置 Content-Type: application/json

如果你沒有手動配置 transformRequest 或其他攔截器,Axios 在發送對象時會默認設置 Content-Type: application/json,因此你可以簡化請求為:

axios.post('/api/login2', { id });

除非你想覆蓋默認行為(比如上傳文件等),否則無需手動設置。


四、最終推薦寫法(最佳實踐)

🧩 前端 Vue + Axios 示例:

const id = 123;axios.post('/api/login2', { id }).then(response => {console.log(response.data); // 輸出:Received ID: 123}).catch(error => {console.error('Error:', error);});

🧩 后端 Spring Boot 示例:

// DTO 對象
public class LoginRequest {private Long id;public Long getId() {return id;}public void setId(Long id) {this.id = id;}
}// 控制器
@RestController
public class AuthController {@PostMapping("/login2")public ResponseEntity<String> login2(@RequestBody LoginRequest request) {return ResponseEntity.ok("Received ID: " + request.getId());}
}

五、總結對比表

寫法前端示例后端接收方式是否推薦
原始值傳參axios.post(url, 123)@RequestBody Long id?? 可行但不推薦
對象傳參(推薦)axios.post(url, { id })@RequestBody LoginRequest? 推薦,結構清晰
使用 Map 接收同上@RequestBody Map<String, Object>? 靈活但類型不安全
使用 @RequestParam-@RequestParam Long id? 不適用于 JSON 請求體

六、結語

雖然 @RequestBody Long id 和原始值傳參在技術上是可行的,但從可維護性、可讀性和項目規范角度出發,我們強烈建議使用對象形式傳遞參數。這不僅符合現代 Web 開發的最佳實踐,也有助于團隊協作和接口文檔的生成(如 Swagger)。

希望本文能幫助你更好地理解前后端交互中 Content-Type 的作用以及參數傳遞的正確方式。

📌 相關閱讀推薦:

  • HTTP 請求中的 Content-Type`類型詳解及前后端示例(Vue + Spring Boot

如有疑問或建議,歡迎留言交流!

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

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

相關文章

微服務拆分 SpringCloud

拆分原則 什么時候拆分 大多數小型項目&#xff1a; 一般是先采用單體架構&#xff0c;隨著用戶規模擴大、業務復雜后再逐漸拆分為微服務架構&#xff08;前易后難&#xff09;。確定的大型項目&#xff1a; 資金充足&#xff0c;目標明確&#xff0c;可以直接選擇微服務架構…

DataX Hive寫插件深度解析:從數據寫入到Hive表關聯實戰

引言 在大數據處理流程中&#xff0c;將數據高效寫入Hive表是數據倉庫建設的關鍵環節。DataX作為阿里巴巴開源的數據同步工具&#xff0c;其Hive寫插件&#xff08;Hdfswriter&#xff09;提供了將數據寫入HDFS并與Hive表無縫關聯的能力。本文將系統介紹Hdfswriter的功能特性、…

基于國產USRP搭建十六通道同步采集系統, 耗費200萬 歡迎免費體驗

隨著無線通信、雷達探測和電子偵察等技術的發展&#xff0c;多通道信號同步采集的需求日益突出。我司基于8臺USRP-LW N321設備&#xff0c;構建了一套高精度十六路通道信號同步采集系統&#xff0c;該系統通過并行采集與精確時頻對齊&#xff0c;可為空間譜測向和MIMO系統等關鍵…

《前端編譯工具源映射配置:Webpack與Gulp的深度剖析》

當我們深入探索不同前端編譯工具時&#xff0c;Webpack與Gulp在源映射配置上的差異與特色&#xff0c;如同隱藏在代碼深處的神秘寶藏&#xff0c;等待我們去挖掘、去解讀。 Webpack作為現代前端構建的核心工具&#xff0c;在源映射配置方面展現出了高度的靈活性與可定制性。它…

4. 時間序列預測的自回歸和自動方法

4.1自回歸 自回歸是一種時間序列預測方法&#xff0c;僅依賴于時間序列的先前輸出&#xff1a;該技術假設下一個時間戳的未來觀測值與先前時間戳的觀測值存在線性關系。 在自回歸中&#xff0c;前一個時間戳的輸出值成為預測下一個時間戳的輸入值&#xff0c;并且誤差遵循簡單線…

Android 多屏幕旋轉控制原理與實戰

在嵌入式設備、雙顯示終端或定制系統中&#xff0c;Android 多屏幕控制&#xff08;尤其是屏幕方向旋轉&#xff09;是一個兼具挑戰與價值的功能模塊。本文將深入分析如何識別多個顯示、如何通過系統 API 控制旋轉&#xff0c;并討論為何某些 displayId 無法旋轉。 &#x1f4c…

faiss上的GPU流程,GPU與CPU之間的聯系

GPU使用流程 1、初始化階段 1.1:初始化GPU資源對象 目的: 為GPU上的操作分配和管理資源,例如臨時內存和CUDA流。 操作: 創建StandardGpuResources對象來管理GPU的內存和計算資源。例如: faiss::gpu::StandardGpuResources res; res.setTempMemory(1024 * 1024 * 512); …

在CentOS 7系統安裝PostgreSQL 15時出現`libzstd.so.1`依賴缺失問題

--> 正在處理依賴關系 libzstd.so.1()(64bit)&#xff0c;它被軟件包 postgresql15-server-15.13-1PGDG.rhel7.x86_64 需要---> 軟件包 python3-pip.noarch.0.9.0.3-8.el7 將被 安裝---> 軟件包 python3-setuptools.noarch.0.39.2.0-10.el7 將被 安裝--> 解決依賴關…

走進Coinate|迪拜第二大交易平臺如何構建極速金融引擎

在加密資產交易飛速發展的今天&#xff0c;技術實力已成為交易平臺生存與發展的核心競爭力。與那些高調營銷卻技術薄弱的平臺不同&#xff0c;來自迪拜的頭部交易平臺——Coinate&#xff0c;則始終堅持”以技術立命”的發展路徑。 在迪拜這片充滿創新與資本活力的中東熱土&am…

手機日志是什么?如何調試手機日志

目錄 一、手機日志的類型&#xff1a; 二、如何查看和調試手機日志&#xff08;以 Android 為例&#xff09;&#xff1a; 方法 1&#xff1a;使用 Android Studio ADB&#xff08;推薦&#xff09; 方法 2&#xff1a;使用手機端日志工具&#xff08;免電腦&#xff09; …

篇章八 論壇系統——業務開發——登錄

目錄 1.登錄 1.1 順序圖 1.2 參數要求 1.3 接口規范 1.4 實現流程 1.編寫SQL 2.dao層接口 3.定義Service接口 4.實現Service接口 5.單元測試 6. Controller實現方法對外提供API接口 7.測試API接口 8.實現前端邏輯,完成前后端交互 ?編輯 1.登錄 1.1 順序圖 1.2 參…

AI-Compass前沿速覽:從企業級智能體CoCo到騰訊開源3D建模,Meta視頻預測模型V-JEPA 2、小紅書開源文本大模型

AI 大事件 智譜推出首個企業級超級助手 Agent——CoCo**[1]** 智譜推出首個企業級超級助手 Agent——CoCo&#xff0c;具備交付導向、記憶機制和無縫嵌入三大企業級特性。能全流程輔助工作&#xff0c;根據員工職能和需求主動服務&#xff0c;無縫接入企業資源&#xff0c;提…

element ui el-table嵌套el-table,實現checkbox聯動效果

HTML代碼&#xff1a; <el-table header-row-class-name"my-el-table-header" row-class-name"my-el-table-body" ref"multipleGroupTable" :data"vehicleGroupTableData" tooltip-effect"dark" style"width: 100…

android stdio 關閉所有真機

Android Studio如何關閉所有真機 Android Studio是開發Android應用程序的集成開發環境&#xff0c;通常我們需要使用真機來進行應用程序的調試和測試。但是&#xff0c;在某些情況下&#xff0c;我們可能需要關閉所有已連接的真機。本文將介紹如何在Android Studio中關閉所有真…

Java程序員如何設計一個高并發系統?

設計一個高并發系統并非易事&#xff0c;如果不站在巨人的肩膀上來開展工作的話&#xff0c;這條路是很難保持一路暢通的&#xff01;所以&#xff0c;本著好東西就是要拿出來分享的原則&#xff0c;LZ就把前段時間從阿里的一位老哥手上撈到的百億級系統架構設計實錄分享給大家…

Flutter 狀態管理與 API 調用的完美結合:從理論到實踐

在現代移動應用開發中&#xff0c;狀態管理和網絡請求是兩個至關重要的概念。Flutter 作為跨平臺開發的佼佼者&#xff0c;提供了豐富的狀態管理解決方案和網絡請求能力。本文將深入探討如何將 Flutter 的狀態管理與 API 調用有機結合&#xff0c;特別是針對常見的列表數據加載…

全網手機二次放號查詢API功能說明和Python調用示例

隨著手機號碼資源的日益緊張&#xff0c;“二次放號”現象愈發普遍&#xff0c;這給新用戶帶來了不少困擾&#xff0c;如頻繁收到騷擾信息、注冊App時號碼被占用等。為了解決這些問題&#xff0c;探數API 提供了一種有效的解決方案——全網手機二次放號查詢API。本文將詳細介紹…

mysql分區備份及還原

備份 ps&#xff1a;mysql是docker啟動的&#xff0c;并且data數據掛載出來了 找到mysql數據庫目錄 /opt/tciot/mysql/data/tciot002ddb 需要備份的文件在數據庫目錄下&#xff08;例如 iot_location#p#p202402.ibd&#xff09;&#xff0c;備份需要的分區cp出來 備份后刪除…

輕量級 ioc 框架 loveqq,支持接口上傳 jar 格式的 starter 啟動器并支持熱加載其中的 bean

輕量級 ioc 框架 loveqq&#xff0c;支持接口上傳 jar 格式的 starter 啟動器并支持熱加載其中的 bean 熱加載 starter 啟動器代碼示例&#xff1a; package com.kfyty.demo;import com.kfyty.loveqq.framework.boot.K; import com.kfyty.loveqq.framework.boot.context.Contex…

圖論----4.實現 Trie (前綴樹)

題目鏈接 /** Trie前綴樹基本結構: (多叉單詞查找樹)每個Trie中包含一個Trie數組與一個結束標識 Trie[] children Trie數組,每個節點都可存放一個Trie,其索引代表該節點對應的字符。 boolean isEnd 結束標識, 代表當前節點是否是一個完整單詞的結尾巴 前綴樹insert流程: 計算第…