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,則默認傳遞的參數(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.復雜對象類型
/**
* 傳遞復雜對象參數(shù)(包含id,username,String[],List<Person>)
*/
setHardObjectParam:function(){
var objectParams = {
schoolName:"鵬峰中學",
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
? /**
? ? ?* 接收復雜對象參數(shù)(包含id,username,String[],List<Person>)
? ? ?*?
? ? ?* @param
? ? ?* @return
? ? ?*/
? ? @RequestMapping("/getHardObjectParam")
? ? @ResponseBody
? ? public void getHardObjectParam(@RequestBody School objectParams) {
? ? ? ? System.out.println("學校名:" + 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-12
javascript dom追加內(nèi)容實現(xiàn)示例
javascript dom追加內(nèi)容的使用還是比較廣泛的,在本文將為大家介紹下具體的使用方法,感興趣的朋友可以參考下2013-09-09
JavaScript函數(shù)防抖與函數(shù)節(jié)流的定義及使用詳解
這篇文章主要為大家詳細介紹一下JavaScript中函數(shù)防抖與函數(shù)節(jié)流的定義及使用,文中的示例代碼講解詳細,對我們學習JS有一定幫助,需要的可以參考一下2022-08-08
uni-app實現(xiàn)數(shù)據(jù)下拉刷新功能實例
很多列表頁總數(shù)量很大,一次性查詢加載會導致頁面有很長時間的空白期,自然體驗感極差,就會使用分頁加載數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于uni-app實現(xiàn)數(shù)據(jù)下拉刷新功能實例的相關(guān)資料,需要的朋友可以參考下2022-08-08

