springMVC 接收json字符串參數
阿新 • • 發佈:2018-01-12
height strong query json字符串 style 拼接 ucc js代碼 不能
1 /** 2 前臺js拼接了一個數組 myparam = [a,b,c]; 在ajax中直接 {"myparam":JSON.stringify(myparam)} 傳入springMVC的controller中,在接收端可以這樣接收 3 */ 4 @RequestMapping(value="/aaa") 5 @ResponseBody 6 public void aaa(@RequestParam(value="myparam")Object myparam ){ //@RequestParam(value="myparam") 也可以不寫,默認就是它 7 Gson gson = newGson(); 8 List mylist = gson.fromJson(myparam.toString(),List.class); 9 for(int i;i<mylist.size();i++){ 10 String item = mylist.get(i).toString(); //得到數組的每一個元素 11 } 12 13 }
上面也可以這樣寫:
1 /** 2 前臺js拼接了一個數組 myparam = [a,b,c]; 在ajax中直接 {"myparam":myparam} 傳入springMVC的controller中,在接收端可以這樣接收3 */ 4 @RequestMapping(value="/aaa") 5 @ResponseBody 6 public void aaa(String[] myparam ){ //這種寫法時,前臺不能傳json字符串,要直接傳數組對象 myparam 不用轉JSON.stringify 7 8 for(int i;i<myparam.length;i++){ 9 myparam[i] //得到數組的每一個元素 10 } 11 12 } 13 //另外如果用ajaxSubmit提交時,可以直接把 myparam = [a,b,c] 中的myparam扔到一個input框的val中,即:$("#inputArr").val(myparam)14 //然後再直接ajaxSubmit表單提交,效果和上面一樣 myparam 會作為一個數組對象被傳遞到後臺。 15 //也就是說不是input框只能提交字符串,扔個 數組對象 進去也是可以的。照樣可以提交對象。
--------------------------------------------------------------------------------
下面是傳遞其他類型的json數據,可以參考下
//js定義json對象 var username = $("#username").val(); var password = $("#password").val(); var json = { "username" : username, "password" : password };
$.ajax({ url : "jsontest", type : "POST", async : true, contentType : "application/json", data : JSON.stringify(json), dataType : ‘json‘, success : function(data) { if (data.userstatus === "success") { $("#errorMsg").remove(); } else { if ($("#errorMsg").length <= 0) { $("form[name=loginForm]").append(errorMsg); } } } });
@RequestMapping("/jsontest") public void test(@RequestBody(required=true) Map<String,Object> map ){ String username = map.get("username").toString(); String password = map.get("password").toString(); System.out.println("username: " + username); System.out.println("password: " + password); }
這種用map接收的方式要求後臺必須用@RequestBody註解,但是這樣要求ajax必須用
contentType : "application/json"
方式,當同一次請求除了傳遞json類型還傳遞許多其他的字符串參數時,就或報400錯誤。這個是個硬傷,要用這種方式,Controller層方法中只能接收一個Json類型的參數,不能再有其他類型的參數。
----------------------------------
也可以參考下面:
@Controller @RequestMapping("/admin/Obj") public class ObjAction { /** * 前端操作與上面相同 * @return */ @RequestMapping(value = "/updateAttr") @ResponseBody public String updateAttr(@RequestBody Map<String, String> map) { if(map.containsKey("id"){ Integer id = Integer.parseInt(map.get("id")); } if(map.containsKey("objname"){ String objname = map.get("objname").toString(); } if(map.containsKey("pid"){ Integer pid = Integer.parseInt(map.get("pid")); } // 操作 ... return "success"; } }
------------------
還可以參考這個:
js代碼:
1 <head> 2 <title>submitUserList_3</title> 3 <meta http-equiv="content-type" content="text/html; charset=utf-8"> 4 <script language="JavaScript" src="/js/jquery.min.js" ></script> 5 <script language="JavaScript" src="/js/jquery.json.min.js" ></script> 6 <script type="text/javascript" language="JavaScript"> 7 function submitUserList_3() {alert("ok"); 8 var customerArray = new Array(); 9 customerArray.push({id: "1", name: "李四", pwd: "123"}); 10 customerArray.push({id: "2", name: "張三", pwd: "332"}); 11 $.ajax({ 12 url: "/user/submitUserList_3", 13 type: "POST", 14 contentType : ‘application/json;charset=utf-8‘, //設置請求頭信息 15 dataType:"json", 16 //data: JSON.stringify(customerArray), //將Json對象序列化成Json字符串,JSON.stringify()原生態方法 17 data: $.toJSON(customerArray), //將Json對象序列化成Json字符串,toJSON()需要引用jquery.json.min.js 18 success: function(data){ 19 alert(data); 20 }, 21 error: function(res){ 22 alert(res.responseText); 23 } 24 }); 25 } 26 </script> 27 </head>
java代碼:
1 @RequestMapping(value = "/submitUserList_3", method ={RequestMethod.POST}) 2 @ResponseBody 3 public String submitUserList_3(@RequestBody List<User> users) 4 throws Exception{ 5 String result = ""; 6 if(users == null || users.size() <= 0){ return "No any ID.中文"; } 7 result = this.showUserList(users); 8 return result; 9 }
springMVC 接收json字符串參數