SpringMVC參數(shù)的傳遞之如何接收List數(shù)組類型的數(shù)據(jù)
前言
本文主要是記錄SpringMVC中當(dāng)前臺(tái)傳過(guò)來(lái)數(shù)組的時(shí)候,如何把前臺(tái)傳過(guò)來(lái)的數(shù)據(jù)封裝到Controller層方法的形參中。
在了解下面參數(shù)如何傳遞前先記住兩個(gè)結(jié)論
- 當(dāng)Ajax以application/x-www-form-urlencoded編碼格式上傳數(shù)據(jù),必須使用JSON對(duì)象傳遞數(shù)據(jù),后臺(tái)需要使用@RequestParam 或者HttpServletRequest來(lái)接收數(shù)據(jù)
- 當(dāng)Ajax以application/json編碼格式上傳數(shù)據(jù),必須使用JSON字符串傳遞數(shù)據(jù),后臺(tái)需要使用@RquestBody標(biāo)識(shí)參數(shù)來(lái)獲取數(shù)據(jù),使用Map或者實(shí)體對(duì)象來(lái)接收數(shù)據(jù),如果只單單是接收一個(gè)數(shù)組,可以使用List來(lái)接收數(shù)據(jù)。
1.前臺(tái)發(fā)送String和基本類型數(shù)組
前臺(tái)數(shù)據(jù)的發(fā)送(發(fā)送json對(duì)象(或js對(duì)象)
$(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){
}
})
})后臺(tái)接收數(shù)據(jù)
后臺(tái)接收數(shù)據(jù)時(shí)的形參必須和前臺(tái)表單里的字段名一樣(如果不一致要使用@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來(lái)接收
@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";
}對(duì)于上面的這兩種接收方式只適用于接收基本類型或包裝類型的數(shù)組。
2.前臺(tái)發(fā)送String類型和對(duì)象數(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){
}
})
})后臺(tái)接收數(shù)據(jù)
一個(gè)方法中只允許有一個(gè)@RequestBody修飾的參數(shù)(此時(shí)方法中只可以有一個(gè)形參),它實(shí)際上是將輸入流的body體作為一個(gè)整體進(jìn)行轉(zhuǎn)換,而body整體只有一份,解析完成之后會(huì)關(guān)閉輸入流。
如果傳入多個(gè)參數(shù)則會(huì)報(bào)錯(cuò),除非自定義參數(shù)解析器。
所以當(dāng)我們既要接收String參數(shù),又要接收對(duì)象數(shù)組的時(shí)候,我們只能把這兩個(gè)參數(shù)封裝在一個(gè)自定義類中。
@RequestMapping(value = "/test1", method = RequestMethod.POST)
@ResponseBody
private String Test1(@RequestBody StringAndList sal) {
System.out.println(sal);
return "success";
}前面不是說(shuō)可以使用Map來(lái)接收數(shù)據(jù)嗎,那使用Map來(lái)接收的數(shù)據(jù)是怎么樣的呢?
我們來(lái)試試
@RequestMapping(value = "/test1", method = RequestMethod.POST)
@ResponseBody
private String Test1(@RequestBody Map<String,Object> map) {
return "success";
}通過(guò)debug,我們可以發(fā)現(xiàn)map保存的數(shù)據(jù)是什么(我們可以把傳過(guò)來(lái)的json對(duì)象中的屬性-值想象成一個(gè)個(gè)key-value,就不難理解為什么可以用Map接收了)

3.前臺(tái)只發(fā)送對(duì)象數(shù)組
上面展示了同時(shí)接收其他類型和對(duì)象數(shù)組的情況,那么如果只接收對(duì)象數(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){
}
})
})后臺(tái)接收數(shù)據(jù)
因?yàn)橹灰邮諗?shù)組,所以不用自定義一個(gè)類來(lái)封裝數(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)文章
Spring?Boot接口支持高并發(fā)具體實(shí)現(xiàn)代碼
這篇文章主要給大家介紹了關(guān)于Spring?Boot接口支持高并發(fā)具體實(shí)現(xiàn)的相關(guān)資料,在SpringBoot項(xiàng)目中通常我們沒有處理并發(fā)問題,但是使用項(xiàng)目本身還是支持一定的并發(fā)量,需要的朋友可以參考下2023-08-08
springboot代碼,注解配置獲取yml,properties文件的map即鍵值對(duì)
這篇文章主要介紹了springboot代碼,注解配置獲取yml,properties文件的map即鍵值對(duì),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-02-02
Java基礎(chǔ)知識(shí)之I/O流和File類文件操作
眾所周知java語(yǔ)言提供給程序員非常多的包供編程時(shí)使用,方便又快捷,下面這篇文章主要給大家介紹了關(guān)于Java基礎(chǔ)知識(shí)之I/O流和File類文件操作的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下2022-04-04
Spring通過(guò)ApplicationContext主動(dòng)獲取bean的方法講解
今天小編就為大家分享一篇關(guān)于Spring通過(guò)ApplicationContext主動(dòng)獲取bean的方法講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03
mybatis plus表的創(chuàng)建時(shí)間和修改時(shí)間的操作方法
這篇文章主要介紹了mybatis plus表的創(chuàng)建時(shí)間和修改時(shí)間的實(shí)現(xiàn)方法,本文給大家分享兩種方法,每種方法通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下2021-09-09
spring mvc4中相關(guān)注解的詳細(xì)講解教程
這篇文章主要給大家介紹了關(guān)于spring mvc4中相關(guān)注解的相關(guān)資料,其中詳細(xì)介紹了關(guān)于@Controller、@RequestMapping、@RathVariable、@RequestParam及@RequestBody等等注解的相關(guān)內(nèi)容,需要的朋友可以參考借鑒,下面來(lái)一起看看吧。2017-06-06
java rocketmq--消息的產(chǎn)生(普通消息)
這篇文章主要介紹了java rocketmq--消息的產(chǎn)生(普通消息),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,,需要的朋友可以參考下2019-06-06

