js傳各種類(lèi)型參數(shù)到Controller層的整理方式
做web開(kāi)發(fā)的一直遇到一個(gè)問(wèn)題怎么發(fā)請(qǐng)求帶各種類(lèi)型的參數(shù)到Controller層,每次都要測(cè)試好久才能請(qǐng)求成功。今天趁有空查資料總結(jié)鞏固一下。
一 .@RequestBody和@RequestParam區(qū)別
1.@RequestParam
用來(lái)處理Content-Type: 為 application/x-www-form-urlencoded編碼的內(nèi)容。(Http協(xié)議中,如果不指定Content-Type,則默認(rèn)傳遞的參數(shù)就是application/x-www-form-urlencoded類(lèi)型)
RequestParam可以接受簡(jiǎn)單類(lèi)型的屬性,也可以接受對(duì)象類(lèi)型。
實(shí)質(zhì)是將Request.getParameter() 中的Key-Value參數(shù)Map利用Spring的轉(zhuǎn)化機(jī)制ConversionService配置,轉(zhuǎn)化成參數(shù)接收對(duì)象或字段。
2.@RequestBody
處理HttpEntity傳遞過(guò)來(lái)的數(shù)據(jù),一般用來(lái)處理非Content-Type: application/x-www-form-urlencoded編碼格式的數(shù)據(jù)。
- GET請(qǐng)求中,因?yàn)闆](méi)有HttpEntity,所以@RequestBody并不適用。
- POST請(qǐng)求中,通過(guò)HttpEntity傳遞的參數(shù),必須要在請(qǐng)求頭中聲明數(shù)據(jù)的類(lèi)型Content-Type,SpringMVC通過(guò)使用HandlerAdapter 配置的HttpMessageConverters來(lái)解析HttpEntity中的數(shù)據(jù),然后綁定到相應(yīng)的bean上。
3.@ModelAttribute
該注解有兩個(gè)用法,一個(gè)是用于方法上,一個(gè)是用于參數(shù)上;
用于方法上時(shí): 通常用來(lái)在處理@RequestMapping之前,為請(qǐng)求綁定需要從后臺(tái)查詢的model;
用于參數(shù)上時(shí):用來(lái)通過(guò)名稱對(duì)應(yīng),把相應(yīng)名稱的值綁定到注解的參數(shù)bean上;要綁定的值來(lái)源于:
- A) @SessionAttributes 啟用的attribute 對(duì)象上;
- B) @ModelAttribute 用于方法上時(shí)指定的model對(duì)象;
- C) 上述兩種情況都沒(méi)有時(shí),new一個(gè)需要綁定的bean對(duì)象,然后把request中按名稱對(duì)應(yīng)的方式把值綁定到bean中。
二.一些常用的傳參類(lèi)型
1.字符串類(lèi)型參數(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層
/** * 接收字符串類(lèi)型參數(shù) * * @param userName * @return */ @RequestMapping("/getStringParam") @ResponseBody public String getStringParam(String userName) { String password = userService.getUserpassword(userName); return password; }
2.對(duì)象類(lèi)型
/** * 傳遞對(duì)象參數(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){ }, }) },
/** * 接收對(duì)象參數(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ù)雜對(duì)象類(lèi)型
/** * 傳遞復(fù)雜對(duì)象參數(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),//重點(diǎn) contentType:"application/json" //指定類(lèi)型 }) },
School類(lèi)
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ù)雜對(duì)象參數(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對(duì)象集合
? ? /** ? ? ?* 接收對(duì)象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()); ? ? ? ? } ? ? ? } /** ?? ??? ? * 傳遞對(duì)象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ù)類(lèi)型在補(bǔ)充。
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
JS 循環(huán)li添加點(diǎn)擊事件 (閉包的應(yīng)用)
這篇文章主要介紹了js循環(huán)li添加點(diǎn)擊事件 (閉包的應(yīng)用)的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2016-12-12JavaScript 代碼分割的實(shí)現(xiàn)步驟
JavaScript代碼分割是一種優(yōu)化策略,通過(guò)將代碼拆分成較小的塊,只在需要時(shí)加載,可以降低初始加載時(shí)間,減小頁(yè)面體積,本文主要介紹了JavaScript代碼分割的實(shí)現(xiàn)步驟,感興趣的可以了解一下2024-01-01javascript dom追加內(nèi)容實(shí)現(xiàn)示例
javascript dom追加內(nèi)容的使用還是比較廣泛的,在本文將為大家介紹下具體的使用方法,感興趣的朋友可以參考下2013-09-09微信小程序?qū)崿F(xiàn)簡(jiǎn)單的select下拉框
這篇文章主要為大家詳細(xì)介紹了微信小程序?qū)崿F(xiàn)簡(jiǎn)單的select下拉框,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-11-11vue2.0實(shí)戰(zhàn)之基礎(chǔ)入門(mén)(1)
這篇文章主要為大家詳細(xì)介紹了vue2.0實(shí)戰(zhàn)第一篇基礎(chǔ)入門(mén)的相關(guān)資料,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-03-03JavaScript函數(shù)防抖與函數(shù)節(jié)流的定義及使用詳解
這篇文章主要為大家詳細(xì)介紹一下JavaScript中函數(shù)防抖與函數(shù)節(jié)流的定義及使用,文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)JS有一定幫助,需要的可以參考一下2022-08-08JS實(shí)現(xiàn)簡(jiǎn)易計(jì)算器
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)簡(jiǎn)易計(jì)算器功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-02-02JavaScript設(shè)計(jì)模式之外觀模式實(shí)例
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之外觀模式實(shí)例,本文用一些代碼實(shí)例來(lái)講解JavaScript中的外觀模式,需要的朋友可以參考下2014-10-10uni-app實(shí)現(xiàn)數(shù)據(jù)下拉刷新功能實(shí)例
很多列表頁(yè)總數(shù)量很大,一次性查詢加載會(huì)導(dǎo)致頁(yè)面有很長(zhǎng)時(shí)間的空白期,自然體驗(yàn)感極差,就會(huì)使用分頁(yè)加載數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于uni-app實(shí)現(xiàn)數(shù)據(jù)下拉刷新功能實(shí)例的相關(guān)資料,需要的朋友可以參考下2022-08-08