springMVC綁定json參數之一


一、SpringMVC @RequestBody接收Json對象字符串

以前,一直以為在SpringMVC環境中,@RequestBody接收的是一個Json對象,一直在調試代碼都沒有成功,后來發現,其實 @RequestBody接收的是一個Json對象的字符串,而不是一個Json對象。然而在ajax請求往往傳的都是Json對象,后來發現用
JSON.stringify(data)的方式就能將對象變成字符串。同時ajax請求的時候也要指定dataType: "json",contentType:"application/json" 這樣就可以輕易的將一個對象或者List傳到Java端,使用@RequestBody即可綁定對象或者List.

下面一個例子需要大家注意:

JavaScript 代碼:

<script type="text/javascript">  
    $(document).ready(function(){  
    test = function () {
        var test = [{"userName":"test","address":"gz"}, 
                 {"userName":"ququ","address":"gr"} 
                 ];

         jQuery.ajax({ 
         url : cur_url+"/weekly/test", 
         type : 'post', 
         data : JSON.stringify(test), 
         dataType : 'json',
         contentType:'application/json;charset=utf-8',
         success : function (data, textStatus) {
              console.info(data);
              alert("test success!");
         },
         error:function(){
              alert("test error!");
         }
    });
 };

  });
</script>

Java代碼

    @RequestMapping("/test")
    @ResponseBody
    public List<User> test(@RequestBody List<User> t) {
      
       
        return t;
    }

這樣是不可以的。因為spring MVC不會自動轉換為List<User>對象。傳到后台后,List中是LinkedHashMap類型。

這時需要使用數組接受,如下:

    @RequestMapping("/test")
    @ResponseBody
    public List<User> test(@RequestBody User[] t) {
       for (User user : t) {
        System.out.println("user:" + user);
        System.out.println("userName:" + user.getUserName());
        System.out.println("address:" + user.getAddress());
        
       }
       List<User> tt = Arrays.asList(t);
       for (int i = 0; i < tt.size(); i++) {
           User u = tt.get(i);
           System.out.println(i + "tt:" + u);
       }
       return tt;
        
    }

這樣就可以正常接收ajax發送的json數組字符串,上面也演示了該數組可以轉為list。這里數組名稱t不用和前台test對應,只要前台傳過來的數組中對象可以對應user對象就行。

這里返回的list<User>轉為的json字符串,前台接收如下:

1 success : function (data, textStatus) { 
2                         console.info(data);
3                         console.info(data.length);
4                         for ( var i = 0; i < data.length; i++) {
5                             console.info(i + ":" + data[i].address);
6                             console.info(i + ":" + data[i].userName);
7                         }
8                         alert("test success!");
9                     },


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM