1. 程式人生 > >springMVC 接收json字符串參數

springMVC 接收json字符串參數

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 = new
Gson(); 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字符串參數