springMVC绑定json参数之二(2.2.3)

二、springmvc 接收不同格式的json字符串

4).格式四:json传递复杂对象(对象中有属性,还有List)

复杂对象:

package testVO;

import java.util.List;

public class Test {
    
    private List<User> uu;
    private String jsonObjName; 
    private Integer id;

    public String getJsonObjName() {
        return jsonObjName;
    }

    public void setJsonObjName(String jsonObjName) {
        this.jsonObjName = jsonObjName;
    }

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public List<User> getUu() {
        return uu;
    }

    public void setUu(List<User> uu) {
        this.uu = uu;
    }
    
}

其中User中还有如下属性(有一个User[]属性来接收的,下一节会将之变成List[]进行测试):

    private String userName;
    private String address;
    private User[] users;

前台构造复杂对象传递:

test = function () {
        //创建复杂的js对象    
        var test = {};
        //给对象加属性(下面两种方式),名字要与后台复杂对象属性名一致
        test["jsonObjName"] = "jsonTest1";
        test.id = 30;
        //创建复杂属性对象List<User>,list在js中都是数组
        var userList = [];
        var user1 = {};
        user1["userName"] = "u1";
        user1["address"] = "add1";
        
        //创建user中的User[]属性对应的js对象
        var userattr = [];
        var user2 = {};
        user2["userName"] = "u2";
        user2["address"] = "add2";
        userattr.push(user2);
        //User对象中有一个变量名为users的数组,private User[] users;这里就是加入该属性
        user1["users"] = userattr;
        userList.push(user1);
        
        //复杂属性加入到js对象中
        test["uu"] = userList;
        
        //传递构造的js到后台
        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!");
            }
        });
    };

后台接收:

@RequestMapping("/test")
        @ResponseBody
        public List<User> test(@RequestBody Test tt) {
            for (User user : tt.getUu()) {
                 System.out.println("user:" + user);
                 System.out.println("userName:" + user.getUserName());
                 System.out.println("address:" + user.getAddress());
                 User[] attr = user.getUsers();
                 for (int i = 0; i < attr.length; i++) {
                    System.out.println("attr>>>" + attr[i]);
                    System.out.println("attr_userName>>>" + attr[i].getUserName() );
                    System.out.println("attr_address>>>" + attr[i].getAddress());
                }
            }
           
            return tt.getUu();
             
         }

这样可以正常绑定
下一节验证后台中复杂对象中用List和数组接收效果是否一致。

原文地址:https://www.cnblogs.com/cainiao-Shun666/p/6768269.html