SpringMVC參數(shù)傳遞之基本數(shù)據(jù)類型和復雜對象說明
前言
本文主要記錄SpringMVC
如何接收前臺傳過來的基本數(shù)據(jù)類型和對象,以及可能出現(xiàn)的組合。
在了解下面參數(shù)如何傳遞前先記住兩個結論
- 當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ù)。
下面可能會用到的一些類
public class User { private String name; private int age; //getter and setter... }
1.當簡單接收基本數(shù)據(jù)類型和包裝類型的時候
當前臺發(fā)送過來一些基本類型或包裝類型的數(shù)據(jù),可以直接使用基本類型或包裝類型形參接收,或者把這些參數(shù)封裝在對象中,使用對象來接收。
前臺發(fā)送json對象(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){ } }) })
后臺使用基本類型或包裝類型形參接收數(shù)據(jù)
形參名必須和前臺發(fā)送過來的屬性名統(tǒng)一,如果不相同(前臺是age
字段,后臺使用userAge
字段接收),可以使用@RequestParam
聲明是要接收哪個字段的值
@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"; }
當然這里也可以使用對象來接收,前提是對象的成員變量名必須和json對象的屬性名一致。
@RequestMapping(value = "/test1", method = RequestMethod.POST) @ResponseBody private String Test1(User user) { System.out.println(user); return "success"; }
2.當接收復雜對象的時候
當從前臺發(fā)過來的json
對象中又包含對象的時候,我們可以考慮用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
對象的屬性名一定要和接收對象的屬性一致。
那我們可不可以使用前臺發(fā)送json
對象(application/x-www-form-urlencoded
),后臺直接使用自定義類來接收呢?
是不可以的,你們自己可以試試。從以往的經(jīng)驗來看,只要前端發(fā)過來的json
對象中包含對象或者數(shù)組,都只能使用前臺發(fā)送json
字符串,后臺使用@RequestBody
修飾的形參接收。
上面只是講解了關于簡單對象和復雜對象參數(shù)的傳遞,如果對象中涉及到數(shù)組呢?
可以看看我另一篇文章SpringMVC參數(shù)的傳遞——接收List數(shù)組類型的數(shù)據(jù)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
Spring MVC參數(shù)校驗詳解(關于`@RequestBody`返回`400`)
這篇文章主要介紹了Spring MVC參數(shù)校驗的相關資料,主要是針對`@RequestBody`返回`400`的問題,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編來一起學習學習吧。2017-08-08Java中4種校驗注解詳解(值校驗、范圍校驗、長度校驗、格式校驗)
這篇文章主要給大家介紹了關于Java中4種校驗注解詳解的相關資料,分別包括值校驗、范圍校驗、長度校驗、格式校驗等,Java注解(Annotation)是一種元數(shù)據(jù),它可以被添加到Java代碼中,并可以提供額外的信息和指令,需要的朋友可以參考下2023-08-08Spring AOP面向切面編程實現(xiàn)原理方法詳解
這篇文章主要介紹了Spring AOP面向切面編程實現(xiàn)原理方法詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-08-08