SpringMVC參數(shù)傳遞之基本數(shù)據(jù)類型和復(fù)雜對(duì)象說明
前言
本文主要記錄SpringMVC
如何接收前臺(tái)傳過來的基本數(shù)據(jù)類型和對(duì)象,以及可能出現(xiàn)的組合。
在了解下面參數(shù)如何傳遞前先記住兩個(gè)結(jié)論
- 當(dāng)Ajax以application/x-www-form-urlencoded編碼格式上傳數(shù)據(jù),必須使用JSON對(duì)象傳遞數(shù)據(jù),后臺(tái)需要使用@RequestParam 或者HttpServletRequest來接收數(shù)據(jù)
- 當(dāng)Ajax以application/json編碼格式上傳數(shù)據(jù),必須使用JSON字符串傳遞數(shù)據(jù),后臺(tái)需要使用@RquestBody標(biāo)識(shí)參數(shù)來獲取數(shù)據(jù),使用Map或者實(shí)體對(duì)象來接收數(shù)據(jù),如果只單單是接收一個(gè)數(shù)組,可以使用List來接收數(shù)據(jù)。
下面可能會(huì)用到的一些類
public class User { private String name; private int age; //getter and setter... }
1.當(dāng)簡單接收基本數(shù)據(jù)類型和包裝類型的時(shí)候
當(dāng)前臺(tái)發(fā)送過來一些基本類型或包裝類型的數(shù)據(jù),可以直接使用基本類型或包裝類型形參接收,或者把這些參數(shù)封裝在對(duì)象中,使用對(duì)象來接收。
前臺(tái)發(fā)送json對(duì)象(application/x-www-form-urlencoded)
$(function () { var obj={}; obj.name="李四"; obj.age=12; $.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)發(fā)送過來的屬性名統(tǒng)一,如果不相同(前臺(tái)是age
字段,后臺(tái)使用userAge
字段接收),可以使用@RequestParam
聲明是要接收哪個(gè)字段的值
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(String name,@RequestParam("age")int userAge) { System.out.println(name); System.out.println(userAge); return "success"; }
當(dāng)然這里也可以使用對(duì)象來接收,前提是對(duì)象的成員變量名必須和json對(duì)象的屬性名一致。
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(User user) { System.out.println(user); return "success"; }
2.當(dāng)接收復(fù)雜對(duì)象的時(shí)候
當(dāng)從前臺(tái)發(fā)過來的json
對(duì)象中又包含對(duì)象的時(shí)候,我們可以考慮用Map
集合接收,或者使用自定義類來封裝。
前端發(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.user1=user1; obj.users.user2=user2; var s=JSON.stringify(obj); $.ajax({ url: "/param/test1", type:"POST", contentType:"application/json", data:JSON.stringify(obj),//"{"name":"展示","users":{"user1":{"name":"李四","age":1},"user2":{"name":"網(wǎng)四","age":23}}}" dataType:"json", success:function(data){ } }) })
使用自定義類來接收
public class StringAndMap { private String name; private Map<String,User> users; //getter and setter.... }
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(@RequestBody StringAndMap sam) { System.out.println(sam.getName()); Map<String,User> userMap=sam.getUsers(); System.out.println(userMap.get("user1")); System.out.println(userMap.get("user2")); return "success"; }
使用Map集合接收
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(@RequestBody Map<String,Object> map) { System.out.println(map.get("name")); Map<String,Object> userMap=(Map<String,Object>)map.get("users"); System.out.println(userMap.get("user1")); System.out.println(userMap.get("user2")); return "success"; }
接收數(shù)據(jù)后的map
形參
無論使用自定義類封裝還是使用Map
集合,json
對(duì)象的屬性名一定要和接收對(duì)象的屬性一致。
那我們可不可以使用前臺(tái)發(fā)送json
對(duì)象(application/x-www-form-urlencoded
),后臺(tái)直接使用自定義類來接收呢?
是不可以的,你們自己可以試試。從以往的經(jīng)驗(yàn)來看,只要前端發(fā)過來的json
對(duì)象中包含對(duì)象或者數(shù)組,都只能使用前臺(tái)發(fā)送json
字符串,后臺(tái)使用@RequestBody
修飾的形參接收。
上面只是講解了關(guān)于簡單對(duì)象和復(fù)雜對(duì)象參數(shù)的傳遞,如果對(duì)象中涉及到數(shù)組呢?
可以看看我另一篇文章SpringMVC參數(shù)的傳遞——接收List數(shù)組類型的數(shù)據(jù)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Spring MVC參數(shù)校驗(yàn)詳解(關(guān)于`@RequestBody`返回`400`)
這篇文章主要介紹了Spring MVC參數(shù)校驗(yàn)的相關(guān)資料,主要是針對(duì)`@RequestBody`返回`400`的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。2017-08-08Java中4種校驗(yàn)注解詳解(值校驗(yàn)、范圍校驗(yàn)、長度校驗(yàn)、格式校驗(yàn))
這篇文章主要給大家介紹了關(guān)于Java中4種校驗(yàn)注解詳解的相關(guān)資料,分別包括值校驗(yàn)、范圍校驗(yàn)、長度校驗(yàn)、格式校驗(yàn)等,Java注解(Annotation)是一種元數(shù)據(jù),它可以被添加到Java代碼中,并可以提供額外的信息和指令,需要的朋友可以參考下2023-08-08Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解
這篇文章主要介紹了Spring AOP面向切面編程實(shí)現(xiàn)原理方法詳解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08Maven環(huán)境安裝配置和新建項(xiàng)目介紹
這篇文章介紹了Maven環(huán)境安裝配置和新建項(xiàng)目介紹,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-12-12記錄一個(gè)使用Spring?Data?JPA設(shè)置默認(rèn)值的問題
這篇文章主要介紹了使用Spring?Data?JPA設(shè)置默認(rèn)值的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-11-11帶你了解Java數(shù)據(jù)結(jié)構(gòu)和算法之隊(duì)列
這篇文章主要為大家介紹了Java數(shù)據(jù)結(jié)構(gòu)和算法之隊(duì)列,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2022-01-01