springMVC常用傳參總結
本文介紹了springMVC常用的傳參方式和一些注意的事項,頁面表單主要以ajax的形式提交.
本帥是個菜雞,水平有限,若有什麼講得不對或有補充的地方歡迎各位提意見。
一、傳遞String型別
1.controller方法使用String物件作為引數接收
(a) controller
使用controller使用string型別接收,引數名與ajax提交引數名對應即可
@RequestMapping("test") @ResponseBody public RespMessage test(String a,String b){ System.out.println(a); System.out.println(b); return RespMessage.success();//這個是返回固定格式的響應資料,不用管 }
(b)頁面提交程式碼
var data = { a:"paramA", b:"paramB" } $.ajax({ "type" : "post",//請求方式 "url" : "test",//請求連線 "dataType":"json",//預期伺服器返回格式,不設定jq也會自己判斷 //"contentType" : "application/x-www-form-urlencoded;charset=utf-8", //不要指定contentType,它會自動識別傳參型別,設定不對反而會報400 data:data,//請求引數 success : function(data) {} });
(c)控制檯輸出
paramA
paramB
2. controller使用bean作為引數接收
(a)TestBean
public class TestBean { private String a; private String b; public String getA() { return a; } public void setA(String a) { this.a = a; } public String getB() { return b; } public void setB(String b) { this.b = b; } }
(b)controller
ajax提交的引數名需要與TestBean成員物件名對應
@RequestMapping("test")
@ResponseBody
public RespMessage test(TestBean testBean){
System.out.println(testBean.getA());
System.out.println(testBean.getB());
return RespMessage.success();
}
(c)頁面提交程式碼同 "一. 1.(b)"
(d)控制檯輸出同 " 一. 1.(c)"
3.使用HttpServletRequest接收
(a)controller @RequestMapping("test3")
@ResponseBody
public RespMessage test(HttpServletRequest request){
System.out.println(request.getParameter("a"));
System.out.println(request.getParameter("b"));
return RespMessage.success();
}
注意:Content-Type不是application/x-www-form-urlencoded的POST請求是不會讀取請求體資料和進行相應的引數處理的,即不會解析表單資料來放到request parameter map中。所以通過request.getParameter(name)是獲取不到的。 其他同上
二、傳遞陣列
1.使用urlencodeed的形式
(a)頁面提交程式碼 /*var data = {
arr:['a','b','c']
}*///這種方式是不能伺服器是接收不到資料的
var data = "arr=a&arr=b&arr=c"
//或者
//var data = "arr=a,b,c";
$.ajax({
"type" : "post",//請求方式
"url" : "test5",//請求連線
"dataType":"json",//預期伺服器返回格式,不設定jq也會自己判斷
data:data,
success : function(data) {}
});
(b)controller
@RequestMapping("test")
@ResponseBody
public RespMessage test(String[] arr){
for(String a:arr){
System.out.println(a);
}
return RespMessage.success();
}
(c)控制檯輸出
ab
c
(d)順便一提,我們可以使用jq的serialize()方法將form序列化成"arr=a&arr=b&arr=c"這樣的格式的資料,具體如下: html部分
<form id="form" action="">
<input type="text" name="arr" value="a">
<input type="text" name="arr" value="b">
<input type="text" name="arr" value="c">
</form>
js部分
var data = $("#form").serialize()
//data="arr=a&arr=b&arr=c"
2.利用@RequestBody接收
(a)controller 在引數上加上@RequestBody註解後就可以接收到前端傳來的json格式的資料 @RequestMapping("test")
@ResponseBody
public RespMessage test(@RequestBody String[] arr){
for(String a:arr){
System.out.println(a);
}
return RespMessage.success();
}
(b)頁面提交程式碼
前端這裡要注意的地方有兩個,一是jq封裝的ajax引數的data這裡要傳字串格式的資料,也就是說在傳值之前需要呼叫JSON.stringify()方法將json物件轉成字元型別,這並不代表伺服器拿到的是字串,到了伺服器那邊是json物件,只是前端這裡傳參需要的是字串,其內部是怎麼轉換的還沒有進行深入研究。 二是要制定contentType為"application/json"否則會報415錯誤。
var data = ['a','b','c'];
data = JSON.stringify(data);//這一部很重要,將json物件轉成字串格式
$.ajax({
"type" : "post",//請求方式
"url" : "test6",//請求連線
"contentType" : "application/json;charset=utf-8",//這個時候就必須加contentType
"dataType":"json",//預期伺服器返回格式,不設定jq也會自己判斷
data:data,
success : function(data) {}
});
(c)控制檯輸出 a
b
c
3.使用@RequestParam
這個方法有個不好的地方就是如果這個引數沒有傳就會報異常 (a)controller @RequestMapping("test")
@ResponseBody
public RespMessage test(@RequestParam(value = "arr[]") String[] arr){
for(String a:arr){
System.out.println(a);
}
return RespMessage.success();
}
(b)請求頁面程式碼
var data = {
arr:['a','b','c']
}
$.ajax({
"type" : "post",//請求方式
"url" : "test4",//請求連線
"dataType":"json",//預期伺服器返回格式,不設定jq也會自己判斷
data:data,
success : function(data) {}
});
4.使用formData
(a)controller @RequestMapping("test5")
@ResponseBody
public RespMessage test2(String[] arr){
for(String a:arr){
System.out.println(a);
}
return RespMessage.success();
}
(b)請求介面程式碼
var data = new FormData($('#form')[0]);
$.ajax({
"type" : "post",//請求方式
"url" : "test5",//請求連線
processData:false,//必須加否則出錯
contentType:false,//必須加否則出錯
"dataType":"json",//預期伺服器返回格式,不設定jq也會自己判斷
data:data,
success : function(data) {}
});
三、傳遞複雜物件
一般遇到比較複雜的物件就使用@requestBody註解比較方便1.使用@requestBody
(a)beanpublic class TestBean2 {
private String a;
private String b;
private TestBean bean;
private TestBean[] beans;
public TestBean[] getBeans() {
return beans;
}
public void setBeans(TestBean[] beans) {
this.beans = beans;
}
public String getA() {
return a;
}
public void setA(String a) {
this.a = a;
}
public String getB() {
return b;
}
public void setB(String b) {
this.b = b;
}
public TestBean getBean() {
return bean;
}
public void setBean(TestBean bean) {
this.bean = bean;
}
}
(b)controller
@RequestMapping("test7")
@ResponseBody
public RespMessage test7(@RequestBody TestBean2 test){
return RespMessage.success();
}
(c)請求頁面程式碼
var data = {
a:"paramA",
b:"paramB",
bean:{a:"beanA",b:"beanB"},
beans:[{a:"beansA1",b:"beadsB1"},{a:"beansA2",b:"beadsB2"}]
}
data = JSON.stringify(data);
$.ajax({
"type" : "post",//請求方式
"url" : "test7",//請求連線
"dataType":"json",//預期伺服器返回格式,不設定jq也會自己判斷
"contentType" : "application/json;charset=utf-8",
data:data,
success : function(data) {}
});
(d)測試結果
2.使用form提交
(a)controller
@RequestMapping("test8")
@ResponseBody
public RespMessage test8(TestBean2 test){
return RespMessage.success();
}
(b)提交頁面程式碼
<form id="form" action="test8" method="post">
<input type="text" name="a" value="paramA">
<input type="text" name="b" value="paramB">
<input type="text" name="bean.a" value="beanA">
<input type="text" name="bean.b" value="beanB">
<input type="text" name="beans[0].a" value="beans0A">
<input type="text" name="beans[0].b" value="beans0B">
</form>
順便一提:這個也可以通過var data = new FormData($('#form')[0]);獲取formdata物件然後通過ajax提交,具體可以參照二.4這裡就不贅述了。
四、傳遞檔案
1.使用form提交
(a)controller @RequestMapping("test10")
@ResponseBody
public RespMessage test10(MultipartFile file){
try {
file.transferTo(new File("E://".concat(file.getOriginalFilename())));
} catch (IllegalStateException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return RespMessage.success();
}
(b)提交頁面程式碼
<form id="form" action="test10" method="post" enctype="multipart/form-data">
<input type="file" name="file">
<input type="submit" value="提交">
</form>
順便一提:檔案上傳同樣可以使用formdata物件使用ajax進行提交,具體參考上面的步驟,這裡就不贅述了。
這裡順便提供一個帶進度條的檔案上傳方法:
//上傳按鈕點選
$("#uploadbtn").click(function(){
var files = $("#file")["0"].files;
var len = files.length;
for(var i=0;i<len;i++) {
UpladFile(files[i],i);
}
})
//開始上傳
function UpladFile(fileObj,i) {
//bar.fadeIn();
//var fileObj = document.getElementById("file").files[0]; // js 獲取檔案物件
var FileController = "/cwjgpt/notice/FileUpload.do"; // 接收上傳檔案的後臺地址
// FormData 物件---進行無重新整理上傳
var form = new FormData();
//form.append("author", "hooyes"); // 可以增加表單資料
form.append("file", fileObj); // 檔案物件
// XMLHttpRequest 物件
var xhr = new XMLHttpRequest();
xhr.open("post", FileController, true);
xhr.onload = function() {
//alert("上傳完成!");
};
//監聽progress事件
xhr.upload.addEventListener("progress",
function(evt){
if (evt.lengthComputable) {
var procce = Math.round(evt.loaded / evt.total * 100);//計算進入百分比
updataprocess(i,procce);//這個是自己寫的一個更新進度條的方法,這裡你們自己實現然後更新介面的進度條
}
}
, false);
xhr.send(form);
}
以後有在遇到一些以上方法滿足不了的情況再繼續更新
相關推薦
springMVC常用傳參總結
本文介紹了springMVC常用的傳參方式和一些注意的事項,頁面表單主要以ajax的形式提交. 本帥是個菜雞,水平有限,若有什麼講得不對或有補充的地方歡迎各位提意見。 一、傳遞String型別 1.controller方法使用String物件作為引數接收 (a) co
Spring MVC學習總結(20)——SpringMVC傳參總結
一、普通屬性1、基礎型別前臺: <input name=”name />後臺: loginUser(String name)同名原則,屬性太多要寫很多形參,非常麻煩.2、物件傳
傳參總結
mongod --dbpath=d:/data 開機再開啟第二個視窗 mongohelp 幫助show dbs 檢視資料庫use 資料庫名字 (use lx1816)切換資料庫db.stu.save({"name":"zsf","age":"16"})查詢:db.stu.find()show collecti
SpringMVC——請求傳參和支援的Servlet原生引數
SpringMVC 會按照請求引數名和POJO屬性名進行自動匹配, 自動為該物件填充屬性值,同時還支援級聯屬性, 例如這裡面的User是一個POJO, 裡面包含的屬性包括String name; int age;Address address; Address裡面包含的屬性比如有
springMVC 前臺傳參 後端集合接收 或者集合包含集合
前臺jsp 介面 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ taglib uri="http://jav
javaWeb頁面傳參總結
web開發中經常用到頁面傳參,現在就來總結一下各種傳參方式。 1.a標籤傳參 <a>標籤傳值的形式--引數固定:<a href="地址?引數名=值"></a>
SpringMVC頁面傳參到後臺,日期字串報錯處理
在controller類中加入如下程式碼, 如果頁面的查詢格式都是同一格式的日期,則直接放到BaseController類中即可: @InitBinder protected void initBinder(WebDataBinder binder) { Simp
日期對象的常用用法(傳參以及轉字符串日期)
想要 當前 沒有 函數 fun 用法 自定義 自動調用 轉換 一、傳參 我們用var now=new Date() 獲得自定義的時間對象 函數中沒有傳遞任何參數,表示此對象now自動獲取了當前的時間。 如果想要創建一個自定義時間的對象,需要在new Date()中傳遞參
SpringMVC中的參數綁定總結
tps 快速入門 query required app http 客戶 接收 imp 眾所周知,springmvc是用來處理頁面的一些請求,然後將數據再通過視圖返回給用戶的,前面的幾篇博文中使用的都是靜態數據,為了能快速入門springmvc,在這一篇博文中,我將總結一下s
ajax請求傳參數復雜對象list,後端springmvc接收參數
ajax請求 問題 .ajax com 系統繁忙 bsp ces dto var 也是同樣的問題, 浪費我不少時間,在此記錄 問題描述: ajax請求後端,springmvc接收參數, 參數是個對象,屬性中有list 解決方法: JS: function save()
SpringMVC接受JSON參數詳解及常見錯誤總結我改
pen 接口 var token 練手 一個 lips users 是不是 SpringMVC接受JSON參數詳解及常見錯誤總結 最近一段時間不想使用Session了,想感受一下Token這樣比較安全,穩健的方式,順便寫一個統一的接口給瀏覽器還有APP。所以把一個練手項目
ajax傳參的一些總結
一、ajax實現get或post的請求的封裝 1、$.ajax({}); 2、url 介面的地址 3、type 請求方式 要結合後臺 4、timeout 請求超時 單位:ms 比如: timeout:3000;
SpringMVC傳參——物件,字串,陣列
PageResult.class public class PagedResult<T> { private List<T> dataList;//資料 private int currentPage;//當前頁 private int pageSize
springmvc 傳參Required String parameter 'xxxx' is not present
傳參 sent 執行 inf 分享圖片 mage con src control 報錯 請求因該是已經被分配了,但是參數補全,無法被執行 加上這個參數就好了,表示請求參數,可以為空 這樣的好處是,可以進入controller之後再去判斷,比較好定位錯誤spri
專案總結之MyBatis Mapper傳參
Mapper類本質是使用了動態代理 什麼是Mybatis? 官話來說: MyBatis 是支援定製化 SQL、 儲存過程以及高階對映的優秀的持久層框架。 MyBatis 避免了幾乎所有的 JDBC 程式碼和手工設定引數以及抽取結果集。 MyBatis 使用簡單的 XML 或註解來配置和對
vue路由傳參(常用)
當點選collection()這個方法的時候,跳轉並帶上標識, collection() { this.$router.push({path: 'notSee', query: { id: '1' }}); },
[C語言]二維陣列傳參的格式(詳細+總結)
喜歡就為我點贊,評論加收藏。 轉載請標明出處[link]https://blog.csdn.net/qq_43868654/article/details/84641383 初遇二維陣列作函式引數,宛如自己化身為了大頭兒子。很頭大。 不禁大聲吶喊:該怎麼宣告定義,該怎麼呼叫,又該怎麼
SpringMVC controller間跳轉重定向傳參
1. 需求背景 需求:spring MVC框架controller間跳轉,需重定向。有幾種情況:不帶引數跳轉,帶引數拼接url形式跳轉,帶引數不拼接引數跳轉,頁面也能顯示。 2. 解決辦法 需求有了肯定是解決辦法了,一一解決,說明下
SpringMvc 傳參中文亂碼
produces="application/json;charset=UTF-8" @RequestMapping(value="/方法名",produces="application/json;charset=UTF-8") Tomcat檔案 service.xml 原來
vue+axios+springmvc 傳參
No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax跨域訪問解決方案 The Response had HTTP code 403. 前臺配置 vue在配置檔案