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                     },
复制代码


 

 

posted @   迷走神经  阅读(2672)  评论(0编辑  收藏  举报
编辑推荐:
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
点击右上角即可分享
微信分享提示