關於js傳各種型別引數到Controller層整理
做web開發的一直遇到一個問題怎麼發請求帶各種型別的引數到Controller層,每次都要測試好久才能請求成功。今天趁有空查資料總結鞏固一下。
一 .@RequestBody和@RequestParam區別
[email protected]
用來處理Content-Type: 為 application/x-www-form-urlencoded編碼的內容。(Http協議中,如果不指定Content-Type,則預設傳遞的引數就是application/x-www-form-urlencoded型別)
RequestParam可以接受簡單型別的屬性,也可以接受物件型別。
實質是將Request.getParameter() 中的Key-Value引數Map利用Spring的轉化機制ConversionService配置,轉化成引數接收物件或欄位。
[email protected]
處理HttpEntity傳遞過來的資料,一般用來處理非
Content-Type: application/x-www-form-urlencoded
編碼格式的資料。
- GET請求中,因為沒有HttpEntity,所以@RequestBody並不適用。
- POST請求中,通過HttpEntity傳遞的引數,必須要在請求頭中宣告資料的型別
Content-Type
,SpringMVC通過使用HandlerAdapter 配置的HttpMessageConverters來解析HttpEntity中的資料,然後繫結到相應的bean上。
[email protected]
該註解有兩個用法,一個是用於方法上,一個是用於引數上;
用於方法上時: 通常用來在處理@RequestMapping之前,為請求繫結需要從後臺查詢的model;
用於引數上時: 用來通過名稱對應,把相應名稱的值繫結到註解的引數bean上;要繫結的值來源於:
A) @SessionAttributes 啟用的attribute 物件上;
B) @ModelAttribute 用於方法上時指定的model物件;
C) 上述兩種情況都沒有時,new一個需要繫結的bean物件,然後把request中按名稱對應的方式把值繫結到bean中。
二.一些常用的傳參型別
1.字串型別引數
/** * 傳遞字串引數 */ 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層
/** * 接收字串型別引數 * * @param userName * @return */ @RequestMapping("/getStringParam") @ResponseBody public String getStringParam(String userName) { String password = userService.getUserpassword(userName); return password; }
2.物件型別
/** * 傳遞物件引數 */ 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){ }, }) },
/** * 接收物件引數 * * @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.複雜物件型別
/** * 傳遞複雜物件引數(包含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類
Controolerpublic 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; } }
/** * 接收復雜物件引數(包含id,username,String[],List<Person>) * * @param * @return */ @RequestMapping("/getHardObjectParam") @ResponseBody public void getHardObjectParam(@RequestBody School objectParams) { System.out.println("學校名:" + objectParams.getSchoolName()); }
4.陣列與字串
/** * 傳遞陣列與字串 */ getArrayAndStringParam:function(){ var pointCodes= new Array(); //定義一陣列 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){ } }); },
/**
* 接收陣列與字串
*
* @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引數
*/
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引數
*/
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){
},
})
},
後續型別在補充。
相關推薦
關於js傳各種型別引數到Controller層整理
做web開發的一直遇到一個問題怎麼發請求帶各種型別的引數到Controller層,每次都要測試好久才能請求成功。今天趁有空查資料總結鞏固一下。一 .@RequestBody和@RequestPa
arcgis jsapi介面入門系列(3):各種型別的圖層新增
這裡說的tomcat切片,是指arcgis server切片後,把切片圖片檔案用tomcat釋出(其他任意web伺服器釋出都行) //新增tomcat切片圖層 addTomcatTileLayer: function () { //圖層
遠端RMI呼叫介面時傳JSON型別引數失敗的解決辦法
一般情況下,遠端呼叫介面時傳的引數型別必須是經過序列化之後的類, 因為資料要在網路間傳輸,需要進行序列化,所以一般需要在介面間傳遞的物件都要實現Serializable介面,一些常用的String,int,long這些資料型別基本上都沒有問題,不過在傳json字串的時候有時
靈活使用AOP面向切面Aspect校驗Controller層單個型別的引數是否為空
我們經常註解使用對controller傳過來的引數進行判空校驗,但使用註解校驗的話常常會遇到controller層方法接收的必須是一個物件(實體類),而我們要校驗並使用的值只有一個或幾個,這樣就會導致判空會出現校驗不靈活的問題,只適合表單提交校驗比較合適,但對一個引數或幾個引
JS中各種變數型別在條件判斷為false的情況
var a = undefined; ->false var a = 0; ->false var a = 0.0; ->false var a = NaN; ->false var
SpringBoot圖片上傳(四) 一個input上傳N張圖,支援各種型別
簡單介紹:需求上讓實現,圖片上傳,並且可以一次上傳9張圖,圖片格式還有要求,網上找了一個測試了下,好用,不過也得改,僅僅是實現了功能,其他不盡合理的地方,還需自己打磨。 程式碼: //html<div class="col-md-12"> <label class="cont
JS 限制上傳檔案型別
直接上程式碼,網上看的,自己改了BUG。實測。 html程式碼 <input type="file" name="ksjh_file" class="ui_hidden" id="uploadksjh" accept="xls,xlsx" onchange="checkFileTy
js接收從另一個頁面的url傳過來的引數
function parseUrl(){ var url=location.href; var i=url.indexOf('?'); if(i==-1)return; var querystr=url.substr(i+1); var arr1=querys
ajax用post請求後臺controller實現前端後臺互動 傳兩個引數 ,後臺controller接收處理
PS→無奈:生氣,就是拿別人的過錯來懲罰自己。原諒別人,就是善待自己。 前臺jsp: $.ajax({ function getPage(page,size) { var postData={ "page":"1",
springboot專案之controller層通過Model物件傳值到對應的返回頁面,返回頁面通過thymeleaf模板引擎來接收傳來的值
1.controller層的方法接收到請求後將返回borrowingBooks.html頁面,並將一個List物件res的值傳遞到borrowingBooks.html頁面。 @Controller
關於Springmvc+mybatis的controller層接收引數的問題
今天在專案中發現,前臺請求後臺Controller層介面,因為少傳個引數,介面直接報500錯誤,debug 打斷點除錯發現根本不進方法塊,說明請求這個方法的時候發現沒有接收到值就直接報錯返回了,可是正常情況下 如果請求少傳引數是不會有這種問題的,只要不加註解限制都不會有這種問
springboot Restful風格Controller層方法引數
@RestController @RequestMapping(value = "/users") public class UserController { /** * 建立執行緒安全的Map */ static Map<Long, User>
web前端——ajax提交後臺controller實現前端後臺互動(2) 傳兩個引數 ,後臺controller接收處理
前臺jsp: $.ajax({ function getPage(page,size) { var postData={ "page":"1", "keywordId":"26"
tp5 js傳參;thinkphp5 js跳轉傳參;thinkphp5 ajax返回引數跳轉
有的時候我們傳送ajax請求到後臺,然後返回一個動態的引數到url做跳轉,因為tp有專門的路由,直接將js帶入到tp路由去生成顯然不現實,這個時候只需要迂迴一下,先用tp自帶路由生成一個連線,然後再用js去替換即可 demo: $.post('{:url("home/me
(看完這篇保證你學會)springboot專案中 controller層與前端的引數傳遞
首先講幾個註解的用法, @RequestParam: 用在方法的引數前面。 @RequestParam String a =request.getParameter("a")。 @PathVariable: 路徑變數。引數與大括號裡的名字一樣要相同。
SpringMVC頁面向Controller提交陣列+Mybatis傳多個引數+MySQL一次寫入多條記錄
DAO層定義:int insertRole2Authorities(@Param("roleId")int roleId, @Param("authorities")List<Integer&g
MVC controller層傳遞引數到前端頁面
方法一: 使用Model類,以key-value的形式傳遞一些簡單的引數(示例為springboot專案中的方法,springboot預設的前端頁面檔案型別為HTML,位於 /專案名/src/main/resources/templates 下) 注意:return的內容
使用FormData進行Ajax請求上傳檔案到controller層的實現
需求背景: 頁面上傳一個檔案到controller層,然後後臺對檔案進行處理。檔案型別不限。 第一種:單純的上傳檔案 頁面功能展現: 第一步:首先需要兩個jar commons-fileupload
springmvc controller接收jsp頁面傳過來的引數和傳值到jsp頁面
接收值--四種方法: 第一種:引數直接寫在controller引數列表中 @RequestMapping("/test1.action") public ModelAndView test1(String name){ System.out.prin
關於js向後臺傳json型別的多個物件 及後臺java接收並取出每一個物件中的值
<!-- 構建物件陣列--> var allTerminal = []; $(function(){ <!--繫結事件--> $('.addBtn').click(function(){