SpringMVC參數(shù)的傳遞之如何接收List數(shù)組類型的數(shù)據(jù)
前言
本文主要是記錄SpringMVC中當前臺傳過來數(shù)組的時候,如何把前臺傳過來的數(shù)據(jù)封裝到Controller層方法的形參中。
在了解下面參數(shù)如何傳遞前先記住兩個結(jié)論
- 當Ajax以application/x-www-form-urlencoded編碼格式上傳數(shù)據(jù),必須使用JSON對象傳遞數(shù)據(jù),后臺需要使用@RequestParam 或者HttpServletRequest來接收數(shù)據(jù)
- 當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";
}當然,也可以使用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ù)解析器。
所以當我們既要接收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-08
springboot代碼,注解配置獲取yml,properties文件的map即鍵值對
這篇文章主要介紹了springboot代碼,注解配置獲取yml,properties文件的map即鍵值對,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
Spring通過ApplicationContext主動獲取bean的方法講解
今天小編就為大家分享一篇關(guān)于Spring通過ApplicationContext主動獲取bean的方法講解,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧2019-03-03
mybatis plus表的創(chuàng)建時間和修改時間的操作方法
這篇文章主要介紹了mybatis plus表的創(chuàng)建時間和修改時間的實現(xiàn)方法,本文給大家分享兩種方法,每種方法通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下2021-09-09
java rocketmq--消息的產(chǎn)生(普通消息)
這篇文章主要介紹了java rocketmq--消息的產(chǎn)生(普通消息),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,,需要的朋友可以參考下2019-06-06

