js傳各種類型參數(shù)到Controller層的整理方式
做web開發(fā)的一直遇到一個問題怎么發(fā)請求帶各種類型的參數(shù)到Controller層,每次都要測試好久才能請求成功。今天趁有空查資料總結(jié)鞏固一下。
一 .@RequestBody和@RequestParam區(qū)別
1.@RequestParam
用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容。(Http協(xié)議中,如果不指定Content-Type,則默認(rèn)傳遞的參數(shù)就是application/x-www-form-urlencoded類型)
RequestParam可以接受簡單類型的屬性,也可以接受對象類型。
實質(zhì)是將Request.getParameter() 中的Key-Value參數(shù)Map利用Spring的轉(zhuǎn)化機制ConversionService配置,轉(zhuǎn)化成參數(shù)接收對象或字段。
2.@RequestBody
處理HttpEntity傳遞過來的數(shù)據(jù),一般用來處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù)。
- GET請求中,因為沒有HttpEntity,所以@RequestBody并不適用。
- POST請求中,通過HttpEntity傳遞的參數(shù),必須要在請求頭中聲明數(shù)據(jù)的類型Content-Type,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上。
3.@ModelAttribute
該注解有兩個用法,一個是用于方法上,一個是用于參數(shù)上;
用于方法上時: 通常用來在處理@RequestMapping之前,為請求綁定需要從后臺查詢的model;
用于參數(shù)上時:用來通過名稱對應(yīng),把相應(yīng)名稱的值綁定到注解的參數(shù)bean上;要綁定的值來源于:
- A) @SessionAttributes 啟用的attribute 對象上;
- B) @ModelAttribute 用于方法上時指定的model對象;
- C) 上述兩種情況都沒有時,new一個需要綁定的bean對象,然后把request中按名稱對應(yīng)的方式把值綁定到bean中。
二.一些常用的傳參類型
1.字符串類型參數(shù)
/** * 傳遞字符串參數(shù) */ getStringParam:function(){ var param={"stringParams":hidden_input_value}; //var param={};兩種方式都行 // param.stringParams=hidden_input_value; $.ajax({ url:basePath+"/ParamFormatController/getStringParam.shtml", data:param, type : 'POST', dataType : 'json', success:function(data){ }, }) },
Controller層
/** * 接收字符串類型參數(shù) * * @param userName * @return */ @RequestMapping("/getStringParam") @ResponseBody public String getStringParam(String userName) { String password = userService.getUserpassword(userName); return password; }
2.對象類型
/** * 傳遞對象參數(shù) */ setObjectParam:function(){ var objectParams={}; objectParams.name="張三"; objectParams.age="19"; objectParams.sex="男"; $.ajax({ url:basePath+"/ParamFormatController/getObjectParam.shtml", data:objectParams, type : 'POST', dataType : 'json', success:function(data){ }, }) },
/** * 接收對象參數(shù) * * @param * @return */ @RequestMapping("/getObjectParam") @ResponseBody public void getObjectParam(Student objectParams) { System.out.println("姓名:" + objectParams.getName()); System.out.println("性別:" + objectParams.getSex()); System.out.println("年齡:" + objectParams.getAge()); }
3.復(fù)雜對象類型
/** * 傳遞復(fù)雜對象參數(shù)(包含id,username,String[],List<Person>) */ setHardObjectParam:function(){ var objectParams = { schoolName:"鵬峰中學(xué)", data:new Date(), teacherNames:["張老師","李老師","王老師"], students:[ {name:"小明",sex:"男",age:"19"}, {name:"小紅",sex:"男",age:"19"}, ] }; $.ajax({ type: "POST", url:basePath+"/ParamFormatController/getHardObjectParam.shtml", data: JSON.stringify(objectParams),//重點 contentType:"application/json" //指定類型 }) },
School類
public class School { ? ? private String[] teacherNames; ? ? private String schoolName; ? ? private Date data; ? ? private List<Student> students; ? ? ? ? ? public String[] getTeacherNames() { ? ? ? ? return teacherNames; ? ? } ? ? ? public void setTeacherNames(String[] teacherNames) { ? ? ? ? this.teacherNames = teacherNames; ? ? } ? ? ? public String getSchoolName() { ? ? ? ? return schoolName; ? ? } ? ? ? public void setSchoolName(String schoolName) { ? ? ? ? this.schoolName = schoolName; ? ? } ? ? ? public Date getData() { ? ? ? ? return data; ? ? } ? ? ? public void setData(Date data) { ? ? ? ? this.data = data; ? ? } ? ? ? public List<Student> getStudents() { ? ? ? ? return students; ? ? } ? ? ? public void setStudents(List<Student> students) { ? ? ? ? this.students = students; ? ? } }
Controoler
? /** ? ? ?* 接收復(fù)雜對象參數(shù)(包含id,username,String[],List<Person>) ? ? ?*? ? ? ?* @param ? ? ?* @return ? ? ?*/ ? ? @RequestMapping("/getHardObjectParam") ? ? @ResponseBody ? ? public void getHardObjectParam(@RequestBody School objectParams) { ? ? ? ? System.out.println("學(xué)校名:" + objectParams.getSchoolName()); ? ? ? }
4.數(shù)組與字符串
/** ?? ??? ? * 傳遞數(shù)組與字符串 ?? ??? ? */ ?? ??? ?getArrayAndStringParam:function(){ ?? ??? ??? ?var pointCodes= new Array(); //定義一數(shù)組 ? ?? ??? ??? ?pointCodes.push("1"); ?? ??? ??? ?pointCodes.push("2"); ?? ??? ??? ?pointCodes.push("3"); ?? ??? ??? ?pointCodes.push("4"); ?? ? ? ? ? ?$.ajax({ ? ?? ? ? ? ? ? ? ?url:basePath+"/ParamFormatController/getArrayAndStringParam.shtml", ? ?? ? ? ? ? ? ? ?type:"POST", ? ?? ? ? ? ? ? ? ?data:{"names":pointCodes,"id":'6'}, ? ?? ? ? ? ? ? ? ?dataType:"json", ? ?? ? ? ? ? ? ? ?success:function(res){ ? ?? ?? ? ? ? ? ? ? ?} ?? ? ? ? ? ? ? ?});? ?? ??? ??? ? ?? ??? ?}, ? ? ? ? ? ? ? ? ? /** ? ? ?* 接收數(shù)組與字符串 ? ? ?*? ? ? ?* @param ? ? ?* @return ? ? ?*/ ? ? @RequestMapping("/getArrayAndStringParam") ? ? @ResponseBody ? ? public void getArrayAndStringParam(@RequestParam(value = "names[]") String[] names, String id) { ? ? ? ? for (int i = 0; i < names.length; i++) { ? ? ? ? ? ? System.out.println(names[i]); ? ? ? ? } ? ? ? }
5.List字符串集合
?? ??? ?/** ?? ??? ? * 傳遞字符串List參數(shù) ?? ??? ? */ ?? ??? ?getListByStringParam:function(){ ?? ??? ??? ??? ?var orderNosList = new Array();? ?? ??? ??? ??? ?orderNosList.push("List1"); ?? ??? ??? ??? ?orderNosList.push("List2"); ?? ??? ??? ??? ?orderNosList.push("List3"); ?? ??? ??? ??? ?orderNosList.push("List4"); ?? ??? ??? ??? ?$.ajax({ ?? ??? ??? ??? ??? ?url:basePath+"/ParamFormatController/getListByStringParam.shtml", ?? ??? ??? ??? ??? ?data:{"StringList":orderNosList}, ?? ??? ??? ??? ??? ?type : 'POST', ?? ??? ??? ??? ??? ?dataType : 'json', ?? ??? ??? ??? ??? ?success:function(data){ ?? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?}, ?? ??? ??? ??? ?}) ?? ??? ??? ? ?? ??? ?}, ? ? /** ? ? ?* 接收字符串List集合 ? ? ?*? ? ? ?* @param ? ? ?* @return ? ? ?*/ ? ? @RequestMapping("/getListByStringParam") ? ? @ResponseBody ? ? public void getListByStringParam(@RequestParam("StringList[]") List<String> list) { ? ? ? ? for (int i = 0; i < list.size(); i++) { ? ? ? ? ? ? System.out.println(list.get(i)); ? ? ? ? } ? ? ? }
6.List對象集合
? ? /** ? ? ?* 接收對象List集合 ? ? ?*? ? ? ?* @param ? ? ?* @return ? ? ?*/ ? ? @RequestMapping(value = "/getListByObjectParam") ? ? @ResponseBody ? ? public void getListByObjectParam(@RequestBody List<Student> students) { ? ? ? ? for (int i = 0; i < students.size(); i++) { ? ? ? ? ? ? Student s = students.get(i); ? ? ? ? ? ? System.out.println(s.getName()); ? ? ? ? } ? ? ? } /** ?? ??? ? * 傳遞對象List參數(shù) ?? ??? ? */ ?? ??? ?getListByObjectParam:function(){ ?? ??? ??? ??? ? var param=[]; ?? ??? ??? ??? ? var data1={"name":"張三","age":"21","sex":"2"}; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?var data2={"name":"李四","age":"24","sex":"2"}; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?param.push(data1); ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?param.push(data2); ?? ??? ??? ??? ?$.ajax({ ?? ??? ??? ??? ??? ?url:basePath+"/ParamFormatController/getListByObjectParam.shtml", ?? ??? ??? ??? ??? ?data:JSON.stringify(param), ?? ??? ??? ??? ??? ?type : 'POST', ?? ??? ??? ??? ??? ?contentType: "application/json", ?? ??? ??? ??? ??? ?success:function(data){ ?? ??? ??? ??? ??? ??? ? ?? ??? ??? ??? ??? ?}, ?? ??? ??? ??? ?}) ?? ??? ??? ? ?? ??? ?},
后續(xù)類型在補充。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
JS 循環(huán)li添加點擊事件 (閉包的應(yīng)用)
這篇文章主要介紹了js循環(huán)li添加點擊事件 (閉包的應(yīng)用)的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下2016-12-12javascript dom追加內(nèi)容實現(xiàn)示例
javascript dom追加內(nèi)容的使用還是比較廣泛的,在本文將為大家介紹下具體的使用方法,感興趣的朋友可以參考下2013-09-09JavaScript函數(shù)防抖與函數(shù)節(jié)流的定義及使用詳解
這篇文章主要為大家詳細介紹一下JavaScript中函數(shù)防抖與函數(shù)節(jié)流的定義及使用,文中的示例代碼講解詳細,對我們學(xué)習(xí)JS有一定幫助,需要的可以參考一下2022-08-08uni-app實現(xiàn)數(shù)據(jù)下拉刷新功能實例
很多列表頁總數(shù)量很大,一次性查詢加載會導(dǎo)致頁面有很長時間的空白期,自然體驗感極差,就會使用分頁加載數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于uni-app實現(xiàn)數(shù)據(jù)下拉刷新功能實例的相關(guān)資料,需要的朋友可以參考下2022-08-08