一:遇到個跨域調用,因為傳個我的參數不定,所以需要通過map來接收參數并進行簽名驗證等操作
理所當然的寫出了下面的代碼,但是發現map里并沒有獲取到傳來的key-value值
1
2
3
4
5
|
@requestmapping (value = "/callback" , produces = "text/html;charset=utf-8" ) @responsebody public string callback( @requestbody map<string, string> params) { return null ; } |
之后我發現httpservletrequest有一個getparametermap方法好像很牛逼的樣子
1
2
3
4
5
6
|
@requestmapping (value = "/callback" , produces = "text/html;charset=utf-8" ) @responsebody public string callback(httpservletrequest httpservletrequest) { map<string, string> params = httpservletrequest.getparametermap(); return null ; } |
然而這么寫還是不對,因為這個方法其實是返回的一個map<string, string[]>對象,而不是我想象中的簡單的map<string, string>類型,這里是可以獲得正確的參數的,但是需要手動進行轉換,不可能是這種情況呀,一定有更好的解決辦法 “用@requestparam試試”,然后就對了。。對了。。了。。
1
2
3
4
5
|
@requestmapping (value = "/callback" , produces = "text/html;charset=utf-8" ) @responsebody public string callback( @requestparam map<string, string> params) { return null ; } |
二:以前,一直以為在springmvc環境中,@requestbody接收的是一個json對象,一直在調試代碼都沒有成功,后來發現,其實 @requestbody接收的是一個json對象的字符串,而不是一個json對象。然而在ajax請求往往傳的都是json對象,后來發現用 json.stringify(data)的方式就能將對象變成字符串。
同時ajax請求的時候也要指定datatype: "json",contenttype:"application/json" 這樣就可以輕易的將一個對象或者list傳到java端,使用@requestbody即可綁定對象或者list.
javascript 代碼:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
<script type= "text/javascript" > $(document).ready(function(){ var savedataary=[]; var data1={ "username" : "test" , "address" : "gz" }; var data2={ "username" : "ququ" , "address" : "gr" }; savedataary.push(data1); savedataary.push(data2); $.ajax({ type: "post" , url: "user/saveuser" , datatype: "json" , contenttype: "application/json" , data:json.stringify(savedata), success:function(data){ } }); }); </script> |
java代碼
1
2
3
4
5
|
@requestmapping (value = "saveuser" , method = {requestmethod.post }}) @responsebody public void saveuser( @requestbody list<user> users) { userservice.batchsave(users); } |
以上這篇快速解決springmvc @requestbody 用map接收請求參數的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持服務器之家。
原文鏈接:https://blog.csdn.net/xiaowu2017/article/details/56830866