zoukankan      html  css  js  c++  java
  • springMVC 接收json字符串参数

     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     }
  • 相关阅读:
    安全系列之二:OAuth2.0 开放授权协议
    安全系列之一:忘记密码
    Tomcat剖析(五):Tomcat 容器
    如何做好项目?
    SonarLint(Sonar) 代码质量管理
    一个JavaWeb项目开发总结
    Tomcat剖析(四):Tomcat默认连接器(2)
    Tomcat剖析(四):Tomcat默认连接器(1)
    Spring mvc 字节流
    spring mvc 之初体验
  • 原文地址:https://www.cnblogs.com/libin6505/p/6812843.html
Copyright © 2011-2022 走看看