SpringMVC參數(shù)的傳遞之如何接收List數(shù)組類型的數(shù)據(jù)
前言
本文主要是記錄SpringMVC
中當(dāng)前臺傳過來數(shù)組的時候,如何把前臺傳過來的數(shù)據(jù)封裝到Controller
層方法的形參中。
在了解下面參數(shù)如何傳遞前先記住兩個結(jié)論
- 當(dāng)Ajax以application/x-www-form-urlencoded編碼格式上傳數(shù)據(jù),必須使用JSON對象傳遞數(shù)據(jù),后臺需要使用@RequestParam 或者HttpServletRequest來接收數(shù)據(jù)
- 當(dāng)Ajax以application/json編碼格式上傳數(shù)據(jù),必須使用JSON字符串傳遞數(shù)據(jù),后臺需要使用@RquestBody標識參數(shù)來獲取數(shù)據(jù),使用Map或者實體對象來接收數(shù)據(jù),如果只單單是接收一個數(shù)組,可以使用List來接收數(shù)據(jù)。
1.前臺發(fā)送String和基本類型數(shù)組
前臺數(shù)據(jù)的發(fā)送(發(fā)送json對象(或js對象)
$(function () { var obj={}; obj.name="李四"; obj.nums=[1,2,3]; $.ajax({ url: "/param/test1", type:"POST", contentType:"application/x-www-form-urlencoded", data:obj, dataType:"json", success:function(data){ } }) })
后臺接收數(shù)據(jù)
后臺接收數(shù)據(jù)時的形參必須和前臺表單里的字段名一樣(如果不一致要使用@RequestParam
聲明,數(shù)組必須聲明)
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(String name,@RequestParam("nums[]") Integer[] nums) { System.out.println(name); for(int i=0;i<nums.length;i++){ System.out.println(nums[i]); } return "success"; }
當(dāng)然,也可以使用List
來接收
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(String name,@RequestParam("nums[]") List<Integer> nums) { System.out.println(name); System.out.println(nums); return "success"; }
對于上面的這兩種接收方式只適用于接收基本類型或包裝類型的數(shù)組。
2.前臺發(fā)送String類型和對象數(shù)組
一些將要使用的類
public class User { private String name; private int age; //getter and setter... }
public class StringAndList { private List<User> users; private String name; //getter and setter... }
前端發(fā)送json
字符串(注意:這里使用application
/json
)
$(function () { var obj={}; obj.name="展示"; var user1={"name":"李四","age":1}; var user2={"name":"網(wǎng)四","age":23}; obj.users=[]; obj.users.push(user1); obj.users.push(user2); var s=JSON.stringify(obj); $.ajax({ url: "/param/test1", type:"POST", contentType:"application/json",//注意編碼格式 data:JSON.stringify(obj),//"{"name":"展示","users":[{"name":"李四","age":1},{"name":"網(wǎng)四","age":23}]}" dataType:"json", success:function(data){ } }) })
后臺接收數(shù)據(jù)
一個方法中只允許有一個@RequestBody
修飾的參數(shù)(此時方法中只可以有一個形參),它實際上是將輸入流的body
體作為一個整體進行轉(zhuǎn)換,而body
整體只有一份,解析完成之后會關(guān)閉輸入流。
如果傳入多個參數(shù)則會報錯,除非自定義參數(shù)解析器。
所以當(dāng)我們既要接收String參數(shù),又要接收對象數(shù)組的時候,我們只能把這兩個參數(shù)封裝在一個自定義類中。
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(@RequestBody StringAndList sal) { System.out.println(sal); return "success"; }
前面不是說可以使用Map
來接收數(shù)據(jù)嗎,那使用Map
來接收的數(shù)據(jù)是怎么樣的呢?
我們來試試
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(@RequestBody Map<String,Object> map) { return "success"; }
通過debug
,我們可以發(fā)現(xiàn)map
保存的數(shù)據(jù)是什么(我們可以把傳過來的json
對象中的屬性-值
想象成一個個key-value
,就不難理解為什么可以用Map
接收了)
3.前臺只發(fā)送對象數(shù)組
上面展示了同時接收其他類型和對象數(shù)組的情況,那么如果只接收對象數(shù)組呢?
前端發(fā)送json字符串
$(function () { var obj=[]; var user1={"name":"李四","age":1}; var user2={"name":"網(wǎng)四","age":23}; obj.push(user1); obj.push(user2); var s=JSON.stringify(obj);//"[{"name":"李四","age":1},{"name":"網(wǎng)四","age":23}]" $.ajax({ url: "/param/test1", type:"POST", contentType:"application/json", data:JSON.stringify(obj), dataType:"json", success:function(data){ } }) })
后臺接收數(shù)據(jù)
因為只要接收數(shù)組,所以不用自定義一個類來封裝數(shù)據(jù)
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(@RequestBody List<User> users) {//參數(shù)名任意 System.out.println(users); return "success"; }
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring?Boot接口支持高并發(fā)具體實現(xiàn)代碼
這篇文章主要給大家介紹了關(guān)于Spring?Boot接口支持高并發(fā)具體實現(xiàn)的相關(guān)資料,在SpringBoot項目中通常我們沒有處理并發(fā)問題,但是使用項目本身還是支持一定的并發(fā)量,需要的朋友可以參考下2023-08-08springboot代碼,注解配置獲取yml,properties文件的map即鍵值對
這篇文章主要介紹了springboot代碼,注解配置獲取yml,properties文件的map即鍵值對,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02Spring通過ApplicationContext主動獲取bean的方法講解
今天小編就為大家分享一篇關(guān)于Spring通過ApplicationContext主動獲取bean的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03mybatis plus表的創(chuàng)建時間和修改時間的操作方法
這篇文章主要介紹了mybatis plus表的創(chuàng)建時間和修改時間的實現(xiàn)方法,本文給大家分享兩種方法,每種方法通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2021-09-09java rocketmq--消息的產(chǎn)生(普通消息)
這篇文章主要介紹了java rocketmq--消息的產(chǎn)生(普通消息),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,,需要的朋友可以參考下2019-06-06