SpringMVC參數(shù)的傳遞之如何接收List數(shù)組類型的數(shù)據(jù)
前言
本文主要是記錄SpringMVC中當(dāng)前臺傳過來數(shù)組的時(shí)候,如何把前臺傳過來的數(shù)據(jù)封裝到Controller層方法的形參中。
在了解下面參數(shù)如何傳遞前先記住兩個(gè)結(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標(biāo)識參數(shù)來獲取數(shù)據(jù),使用Map或者實(shí)體對象來接收數(shù)據(jù),如果只單單是接收一個(gè)數(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ù)時(shí)的形參必須和前臺表單里的字段名一樣(如果不一致要使用@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ù)
一個(gè)方法中只允許有一個(gè)@RequestBody修飾的參數(shù)(此時(shí)方法中只可以有一個(gè)形參),它實(shí)際上是將輸入流的body體作為一個(gè)整體進(jìn)行轉(zhuǎn)換,而body整體只有一份,解析完成之后會關(guān)閉輸入流。
如果傳入多個(gè)參數(shù)則會報(bào)錯(cuò),除非自定義參數(shù)解析器。
所以當(dāng)我們既要接收String參數(shù),又要接收對象數(shù)組的時(shí)候,我們只能把這兩個(gè)參數(shù)封裝在一個(gè)自定義類中。
@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對象中的屬性-值想象成一個(gè)個(gè)key-value,就不難理解為什么可以用Map接收了)

3.前臺只發(fā)送對象數(shù)組
上面展示了同時(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ù)
因?yàn)橹灰邮諗?shù)組,所以不用自定義一個(gè)類來封裝數(shù)據(jù)
@RequestMapping(value = "/test1", method = RequestMethod.POST)
@ResponseBody
private String Test1(@RequestBody List<User> users) {//參數(shù)名任意
System.out.println(users);
return "success";
}以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java JFinal框架中實(shí)現(xiàn)添加定時(shí)任務(wù)功能詳解
這篇文章主要為大家詳細(xì)介紹了如何在JFinal框架項(xiàng)目中添加定時(shí)任務(wù)的功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2025-02-02
Mybatis-plus多條件篩選分頁的實(shí)現(xiàn)
本文主要介紹了Mybatis-plus多條件篩選分頁,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-09-09
idea新建maven項(xiàng)目沒有src目錄的操作方法
這篇文章主要介紹了idea新建maven項(xiàng)目沒有src目錄的兩種操作方法,需要的朋友可以參考下2018-03-03
Java設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn)方式
這篇文章主要介紹了Java設(shè)計(jì)模式之外觀模式的實(shí)現(xiàn)方式,外觀模式隱藏系統(tǒng)的復(fù)雜性,并向客戶端提供了一個(gè)客戶端可以訪問系統(tǒng)的接口,這種類型的設(shè)計(jì)模式屬于結(jié)構(gòu)型模式,它向現(xiàn)有的系統(tǒng)添加一個(gè)接口,來隱藏系統(tǒng)的復(fù)雜性,需要的朋友可以參考下2023-11-11
java實(shí)現(xiàn)ftp上傳 如何創(chuàng)建文件夾
這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)ftp上傳的相關(guān)資料,教大家如何創(chuàng)建文件夾?具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-04-04

