【JavaEE】_Spring MVC 項目傳參問題

目錄

?1. 傳遞單個參數

1.1 關于參數名的問題

2. 傳遞多個參數

2.1 關于參數順序的問題

2.2 關于基本類型與包裝類的問題

3. 使用對象傳參

4. 后端參數重命名問題

4.1 關于@RequestPara注解


?1. 傳遞單個參數

現創建Spring MVC項目,.java文件內容如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M1")public String m1(String name){return "Parameter has Received: Name:"+name;}
}

運行啟動類,使用Postman向目標地址發送一個GET請求,將待傳參數置于query string中,發送的請求與得到的響應如下::

1.1 關于參數名的問題

請注意:客戶端傳遞給服務器的參數應與服務器創建的參數名相同

對于傳遞單個參數的底層邏輯就是從請求的參數中獲取參數名為name的值,并給name賦值;

2. 傳遞多個參數

在Spring MVC項目的.java文件內容如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M2")public String M2(String name, Integer age){return "Parameters have received: \n"+ "Name: "+name + "; Age: "+age;}
}

運行啟動類后,構造HTTP請求并發送,詳情如下:

2.1 關于參數順序的問題

注:多個參數傳參,與參數的順序無關,僅與參數名是否匹配有關;

2.2 關于基本類型與包裝類的問題

現以基本類型 int 與 包裝類Integer 為例:

現Spring MVC項目的.java文件內容如下:

package com.example.demo.controller;import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController@RequestMapping("/M3")public String M3(String name, int age){return "Parameters have received: \n"+ "Name: "+name + "; Age: "+age;}
}

示例1:當 int 型參數有具體傳參時:

運行啟動類,構造HTTP請求并發送,詳情如下:?

可見接收正常,返回正常;

示例2:當 int 型參數沒有具體傳參時:

啟動運行類,構造HTTP請求并發送,詳情如下:

查看報錯信息如下:

建議:在開發中盡量使用包裝類,如果使用基本類型的參數,必須要傳值

關于包裝類的問題,可查看數據結構專欄包裝類與泛型一文,鏈接如下:

【數據結構】_包裝類與泛型-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_63299495/article/details/136436372

3. 使用對象傳參

如上文所述,當傳遞的參數個數與類型不同時,就需要頻繁修改。

這于前后端配合是非常不便的,在Spring MVC項目中,常使用對象進行傳參:

現創建 Person class, 令目錄如下:

Person.java文件內容如下:

package com.example.demo;public class Person {Integer id;String name;Integer age;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public Integer getAge() {return age;}public void setAge(Integer age) {this.age = age;}@Overridepublic String toString() {return "Person{" +"id=" + id +", name='" + name + '\'' +", age=" + age +'}';}
}

ParaController.java內容如下:

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M4")public String M4(Person person){return "Parameters have received: \n"+ person.toString();}
}

使用postman構造并發送請求,詳情如下:?

在spring項目開發中,通常使用對象對要傳遞的參數組進行封裝,這樣可以簡化接口邏輯。

也方便使用一些邏輯進行默認值的設定;

4. 后端參數重命名問題

在前后端配合時,也有可能會出現對于前端傳遞的參數名(如name),在后端需要進行修改的問題(如username,articlename等等),此時可以使用@RequestParm注解對后端參數重命名:

現.java文件內容如下:

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M5")public String m5(@RequestParam("name") String username){return "Parameter has Received: Name:"+username;}
}

運行啟動類,構造HTTP請求并發送,詳情如下:

示例1:前端使用name,后端使用username:

示例2:前端與后端均使用username:

查看日志警告信息:?

?

4.1 關于@RequestPara注解

Ctrl+左鍵點擊查看@RequestPara注解源碼:

可見@RequestPara注解默認情況為:

當后端使用@RequestPara注解對后端參數進行重命名時,默認該屬性為必傳屬性;

可以修改為false,取消其必傳限制:

package com.example.demo.controller;import com.example.demo.Person;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;@RequestMapping("/Para")
@RestController
public class ParaController {@RequestMapping("/M5")public String m5(@RequestParam(value = "name",required = false) String username){return "Parameter has Received: Name:"+username;}
}

此時再構造請求發送給服務器:

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

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

相關文章

2024年3月計劃

根據規劃,為了要考慮把產品代碼吃透。先對于計算幾何,圖像處理,測量學基礎進行 當然,也要把ue繼續進行著。ue的rpg和底層渲染。收集下虛幻商城的免費資源,萬一以后做獨立游戲用得到。其他的可以暫時不進行。因為ue的工…

Apache Flink連載(三十七):Flink基于Kubernetes部署(7)-Kubernetes 集群搭建-3

?? 個人主頁:IT貧道-CSDN博客 ?? 私聊博主:私聊博主加WX好友,獲取更多資料哦~ ?? 博主個人B棧地址:豹哥教你學編程的個人空間-豹哥教你學編程個人主頁-嗶哩嗶哩視頻 目錄

AI-數學-高中-32-概率-樣本空間與隨機事件

原作者視頻:【概率】【一數辭典】1樣本空間與隨機事件_嗶哩嗶哩_bilibili 1.隨機試驗: 2.樣本點、樣本空間、有限樣本空間: 示例1 示例2 3.事件: 示例:

PAT基礎練習

本題要求你寫個程序把給定的符號打印成沙漏的形狀。例如給定17個“*”,要求按下列格式打印 ************ *****所謂“沙漏形狀”,是指每行輸出奇數個符號;各行符號中心對齊;相鄰兩行符號數差2;符號數先從大到小順序遞減…

自己本地模擬內存數據庫增刪改查

目錄 學習初衷準備代碼實現結果感謝閱讀 學習初衷 用于滿足自己的測試要求,不連接數據庫,也不在意數據丟失 準備 maven依賴 org.springframework.boot spring-boot-starter-test test 代碼實現 內存數據庫(InMemoryDatabase&#xff0…

[AutoSar]BSW_Com08 CAN driver 模塊介紹及參數配置說明 (二)

目錄 關鍵詞平臺說明一、CanControllers二、CanTxProcessing三、CanFilterMask四、CanHardwareObjects五、CanGeneral 關鍵詞 嵌入式、C語言、autosar、OS、BSW 平臺說明 項目ValueOSautosar OSautosar廠商vector ,芯片廠商TI 英飛凌編程語言C,C編譯器…

游戲引擎分層簡介

游戲引擎分層架構(自上而下) 工具層(Tool Layer) 在一個現代游戲引擎中,我們最先看到的可能不是復雜的代碼,而是各種各樣的編輯器,利用這些編輯器,我們可以制作設計關卡、角色、動畫…

數據類型和變量

1.數據類型 在Java中數據類型主要分為兩類:基本數據類型和引用數據類型。 基本數據類型有四類八種: 1. 四類:整型、浮點型、字符型以及布爾型 2.八種: 整形是分為如上四種 byte short int long 浮點型分為 float 和double …

Docker Compose系列--搭建halo與mysql

原文網址:使用Docker Compose系列--搭建halo與mysql_IT利刃出鞘的博客-CSDN博客 簡介 說明 本文介紹如何使用Docker Compose搭建halo與mysql。 官網網址 使用 Docker 部署 Halo 和 MySQL | Halo Documents Docker Compose搭建mysql 見:Docker Com…

【大廠AI課學習筆記NO.64】機器學習開發框架

機器學習開發框架本質上是一種編程庫或工具,目的是能夠讓開發人員更容易、更快速地構建機器學習模型。 機器學習開發框架封裝了大量的可重用代碼,可以直接調用,目的是避免“重復造輪子’大幅降低開發人員的開發難度,提高開發效率…

軟考高級:候選碼、主碼、全碼、外碼、主屬性、主鍵、主關鍵字、非主屬性概念和例題

一、AI 講解 候選碼、主碼、全碼、外碼、主屬性、主鍵、主關鍵字、非主屬性是數據庫設計和數據建模中的基本概念,特別是在關系數據庫模型中。下面將對這些概念進行簡單講解,并給出相應的例子。 概念講解 候選碼(Candidate Key)…

Spring框架精髓:帶你手寫IoC

個人名片: 🐼作者簡介:一名大三在校生,喜歡AI編程🎋 🐻???個人主頁🥇:落798. 🐼個人WeChat:hmmwx53 🕊?系列專欄:🖼?…

足球青訓俱樂部|基于Springboot的足球青訓俱樂部管理系統設計與實現(源碼+數據庫+文檔)

足球青訓俱樂部管理系統目錄 目錄 基于Springboot的足球青訓俱樂部管理系統設計與實現 一、前言 二、系統設計 1、系統架構設計 三、系統功能設計 1、管理員登錄界面 2、公告信息管理界面 3、學員管理界面 4、商品信息管理界面 5、課程安排管理界面 四、數據庫設計…

ArcGIS Runtime For Android開發之符號化和圖層渲染

一、用Symbol對要素進行符號化 首先我們看一下Symbol 接口關系: 1、SimpleFillSymbol 他是用來進行簡單的Graphic面要素填充符號化的,它可以設置要素的填充顏色,邊線顏色、線寬,其用法如下: Polygon polygonnew Po…

常用的電阻、電容的種類和應用場合?

電阻的 a.按阻值特性:固定電阻、可調電阻、特種電阻(敏感電阻),不能調節的,我們稱之為固定電阻,而可以調節的,我們稱之為可調電阻.常見的例如收音機音量調節的,主要應用于電壓分配的,我們稱之為電位器. b.按制造材料:碳膜電阻、金屬膜電阻、線繞電阻,捷…

Go切片特點筆記

特點 1.只有append操作2.支持子切片3.內存共享問題 1.只有append操作 不支持隨機增刪 2.支持子切片 數組和切片都可以通過[start:end] 的形式 來獲取子切片: 1.arr[start:end],獲得[start,end)之間的元素。 2.arr[:end],獲得[0,end)之間的元素。 3.arr[start:],獲得[start,l…

二叉樹葉節點個數,根節點個數,樹的深度,查找數據為x的節點

文章目錄 一、計算二叉樹葉節點個數二、葉節點的個數 引言:補充樹的概念 節點的度:一個節點含有的子樹的個數稱為節點的度 葉節點或終端節點:度為0的節點稱為葉節點 節點的層次:從根開始為第一層,以此類推 樹的度&…

Leetcode150二刷總結

滑動窗口(ok) 題號:3、209、76 定義好窗口的左邊界left和右邊界right一般是只需要遍歷right,滿足條件后調整left 鏈表 題號:206、92、146、25、21 反轉鏈表主要是設置好pre(初始為null)和c…

【Godot 4.2】Tree控件與TreeItem完全解析

概述 本篇是控件完全解析系列之一,主要總結一下Tree控件與TreeItem的使用。 Tree控件是一個非常強大的控件,尤其是在編寫一些相關的程序或編輯器插件時,非常適合展示樹形組織的節點型數據。 本篇將從簡單的添加根節點,根節點子…

uniapp和vue項目配置多語言,實現前端切換語言

在uniapp中配置多語言功能,實現前端切換語言,可以按照以下步驟進行: 1. 創建語言包 首先,創建一個名為 lang 的目錄,并在該目錄下為每種支持的語言創建對應的JSON或JS文件。例如: lang/en.js&#xff08…