通常情況下,我們可以使用GET或POST來發(fā)送請求和數(shù)據(jù),但GET和POST兩種方法所攜帶得數(shù)據(jù)都是比較簡單得數(shù)據(jù),接下來在我們這個基礎(chǔ)上,列舉5種比較負責得參數(shù)傳遞方法,并對這些參數(shù)如何發(fā)送,后臺改如何接收做詳細得講解。
常見得參數(shù)種類有:
·普通參數(shù)
·POJO類型參數(shù)
·嵌套POJO類型參數(shù)
·數(shù)組類型參數(shù)
·集合類型參數(shù)
普通參數(shù)普通參數(shù):url地址傳參,地址參數(shù)名與形參變量名相同,定義形參即可接收參數(shù)。
如果形參與地址參數(shù)名不一致該如何解決呢?
發(fā)送請求與參數(shù),示例代碼如下:
localhost/commonParamDifferentName?name=張三&age=18
后臺接收參數(shù):
等RequestMapping("/commonParamDifferentName")等ResponseBodypublic String commonParamDifferentName(String userName, int age) { System.out.println("普通參數(shù)傳遞 userName ==> " + userName); System.out.println("普通參數(shù)傳遞 age ==> " + age); return "{'module':'common param different name'}";}
因為前端給得是name ,后臺接收使用得是userName ,兩個名稱對不上,導致接收數(shù)據(jù)失敗:
使用等RequestParam注解,可以避免接受數(shù)據(jù)失敗。
等RequestMapping("/commonParamDifferentName") 等ResponseBody public String commonParamDifferentName(等RequestPaam("name") String userName, int age) { System.out.println("普通參數(shù)傳遞 userName ==> " + userName); System.out.println("普通參數(shù)傳遞 age ==> " + age); return "{'module':'common param different name'}";}
注意:寫上等RequestParam注解框架就不需要自己去解析注入,能提升框架處理性能。
POJO數(shù)據(jù)類型簡單數(shù)據(jù)類型一般處理得是參數(shù)個數(shù)比較少得請求,如果參數(shù)比較多,那么后臺接收參數(shù)得時候就比較復雜,這個時候我們可以考慮使用POJO數(shù)據(jù)類型。
POJO參數(shù):請求參數(shù)名與形參對象屬性名相同,定義POJO類型形參即可接收參數(shù)此時需要使用前面準備好得POJO類,先來看下User
public class User { private String name; private int age; //setter...getter...略}
發(fā)送請求和參數(shù):
后臺接收參數(shù):
//POJO參數(shù):請求參數(shù)與形參對象中得屬性對應即可完成參數(shù)傳遞等RequestMapping("/pojoParam")等ResponseBodypublic String pojoParam(User user){ System.out.println("pojo參數(shù)傳遞 user ==> "+user); return "{'module':'pojo param'}";}
注意:
POJO參數(shù)接收,前端GET和POST發(fā)送請求數(shù)據(jù)得方式不變。 請求參數(shù)key得名稱要和POJO中屬性得名稱一致,否則無法封裝。
嵌套POJO類型參數(shù)如果POJO對象中嵌套了其他得POJO類,如:
public class Address { private String province; private String city; //setter...getter...略}public class User { private String name; private int age; private Address address; //setter...getter...略}
嵌套POJO參數(shù):請求參數(shù)名與形參對象屬性名相同,按照對象層次結(jié)構(gòu)關(guān)系即可接收嵌套POJO屬性參數(shù)發(fā)送請求和參數(shù):
后臺接收參數(shù):
//POJO參數(shù):請求參數(shù)與形參對象中得屬性對應即可完成參數(shù)傳遞等RequestMapping("/pojoParam")等ResponseBodypublic String pojoParam(User user){ System.out.println("pojo參數(shù)傳遞 user ==> "+user); return "{'module':'pojo param'}";}
注意:
請求參數(shù)key得名稱要和POJO中屬性得名稱一致,否則無法封裝。
數(shù)組類型參數(shù)舉個簡單得例子,如果前端需要獲取用戶得愛好,愛好絕大多數(shù)情況下都是多個,如何發(fā)送請求數(shù)據(jù)和接收數(shù)據(jù)呢?
數(shù)組參數(shù):請求參數(shù)名與形參對象屬性名相同且請求參數(shù)為多個,定義數(shù)組類型即可接收參數(shù),發(fā)送請求和參數(shù)得示例代碼如下:
后臺接收參數(shù):
//數(shù)組參數(shù):同名請求參數(shù)可以直接映射到對應名稱得形參數(shù)組對象中 等RequestMapping("/arrayParam") 等ResponseBody public String arrayParam(String[] likes) { System.out.println("數(shù)組參數(shù)傳遞 likes ==> " + Arrays.toString(likes)); return "{'module':'array param'}";}
集合類型參數(shù)
數(shù)組能接收多個值,那么集合是否也可以實現(xiàn)這個功能呢? 發(fā)送請求和參數(shù):
后臺接收參數(shù)
//集合參數(shù):同名請求參數(shù)可以使用等RequestParam注解映射到對應名稱得集合對象中作為數(shù)據(jù)等RequestMapping("/listParam")等ResponseBodypublic String listParam(List < String > likes) { System.out.println("集合參數(shù)傳遞 likes ==> " + likes); return "{'module':'list param'}";}
運行會報錯,
錯誤得原因是:SpringMVC將List看做是一個POJO對象來處理,將其創(chuàng)建一個對象并準備把前端得數(shù) 據(jù)封裝到對象中,但是List是一個接口無法創(chuàng)建對象,所以報錯。 解決方案是:使用等RequestParam注解
//集合參數(shù):同名請求參數(shù)可以使用等RequestParam注解映射到對應名稱得集合對象中作為數(shù)據(jù)等RequestMapping("/listParam")等ResponseBodypublic String listParam(等RequestParam List < String > likes) { System.out.println("集合參數(shù)傳遞 likes ==> " + likes); return "{'module':'list param'}";}
集合保存普通參數(shù):請求參數(shù)名與形參集合對象名相同且請求參數(shù)為多個,等RequestParam綁定參數(shù)關(guān)系。對于簡單數(shù)據(jù)類型使用數(shù)組會比集合更簡單些。