• springMVC绑定json参数之二(2.1.1)


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

    1.首先扫盲几个知识点:

    例子如下:

     前台传递json对象(这里uu[0]的名字uu要和Test对象中的属性List<User>名称对应):

     1 test = function () {
     2         
     3                 jQuery.ajax({  
     4                     url : cur_url+"/weekly/test",  
     5                     type : 'post',  
     6                     data : {"jsonObjName":"123","id":456,"uu[0].userName":"hxy1","uu[0].address":"add1",
     7                         "uu[1].userName":"hxy2","uu[1].address":"add2"},  
     8                     dataType : 'json',
     9                     success : function (data, textStatus) { 
    10                         console.info(data);
    11                         console.info(data.length);
    12                         for ( var i = 0; i < data.length; i++) {
    13                             console.info(i + ":" + data[i].address);
    14                             console.info(i + ":" + data[i].userName);
    15                         }
    16                         alert("test success!");
    17                     },
    18                     error:function(){
    19                         alert("test error!");
    20                     }
    21                 });
    22     };

    后台接收(不使用@requestBody标签):

     1     @RequestMapping("/test")
     2     @ResponseBody
     3     public List<User> test(String jsonObjName, Integer id, Test t1) {
     4        List<User> uList = t1.getUu();
     5        for (User user : uList) {
     6         System.out.println(user);
     7         System.out.println("address:" + user.getAddress());
     8         System.out.println("userName:" + user.getUserName());
     9     }
    10        return uList;
    11         
    12     }

    Test对象定义如下:

     1 package testVO;
     2 
     3 import java.util.List;
     4 
     5 public class Test {
     6     
     7     private List<User> uu;
     8     private String jsonObjName; 
     9     private Integer id;
    10     
    11 
    12     
    13 
    14     public String getJsonObjName() {
    15         return jsonObjName;
    16     }
    17 
    18     public void setJsonObjName(String jsonObjName) {
    19         this.jsonObjName = jsonObjName;
    20     }
    21 
    22     public Integer getId() {
    23         return id;
    24     }
    25 
    26     public void setId(Integer id) {
    27         this.id = id;
    28     }
    29 
    30     public List<User> getUu() {
    31         return uu;
    32     }
    33 
    34     public void setUu(List<User> uu) {
    35         this.uu = uu;
    36     }
    37     
    38 }

    注意:

    其实ajax只传递json对象,和表单提交绑定参数一样,和技术无关,用springmvc,struts2都可以绑定,这种方式和ajax序列化表单对象传递是一样的:$("form").serialize(),只不过如果想在ajax传递json对象直接绑定到springmvc对象中就必须使用@RequestBody标签,前台也要遵循传json字符串和指定contentType:"application/json",参考上一节,@RequestBody标签的存在就是方便json对象的绑定,ajax中不用麻烦的构造表单的json对象。

    加一点,如果ajax传递json对象(不是json字符串),并且是json简单数组对象(String[],Integer[]等),类似表单提交,后台也不用@RequestBody接收,而是如下接收:

    public JsonResultForProject<List<TapeoutCheckTable>> todoTapeoutCheckList(Model model, 
                @RequestParam(required = false, value = "tapoutDomainIdss[]") List<Integer> tapoutDomainIdss,
                @RequestParam(required = false, value = "pdLocationIdss[]") List<Integer> pdLocationIdss,
                @RequestParam(required = false, value = "yearStrss[]") List<Integer> yearStrss,
                @RequestParam(required = false, value = "dftLocationIdss[]") List<Integer> dftLocationIdss,
                String projectNamess, TapeoutCheckQueryVo tcVo,String tabType) 

    @RequestParam

    A) 常用来处理简单类型的绑定,通过 Request.getParameter() 获取的String可直接转换为简单类型的情况( String--> 简单类型的转换操作由ConversionService配置的转换器来完成);因为使用request.getParameter()方式获取参数,所 以可以处理get 方式中queryString的值,也可以处理post方式中 body data的值;

    B)用来处理Content-Type: 为 application/x-www-form-urlencoded编码的内容,提交方式GET、POST;

    C) 该注解有两个属性: value、required; value用来指定要传入值的id名称,required用来指示参数是否必须绑定;

    例子中value中的值tapoutDomainIdss名字和ajax中json对象中的key相同,对应的值为整形的数组。

  • 相关阅读:
    VB程序破解常用函数
    去VB程序NAG窗口方法-4C法
    error LNK2005: _DllMain@12 已经在 XXXX.obj 中定义
    汇编中的test和cmp指令
    OD保存修改后的数据到EXE
    C++ 异常捕获 try 和 __try的区别
    CListCtrl选中行
    WindowsAPI解析IAT地址
    Usaco 4.3.1 Buy Low, Buy Lower 逢低吸纳详细解题报告
    全国青少年信息学奥林匹克分区联赛(N)竞赛大纲
  • 原文地址:https://www.cnblogs.com/cainiao-Shun666/p/6767352.html
Copyright © 2020-2023  润新知