当前位置:   article > 正文

@Requestparam和@RequestBody接受区别以及异步ajax和axios传参区别_@requestparam可以对象吗

@requestparam可以对象吗

1.@RequestParam等同于request.getParameter的获取方式相同,主要处理默认的application/x-www-form-urlencoded提交的类型数据,是一个对象。@RequestParam接受的是一个对象,如果和fastjosn.jar中的JSONObject使用就会报错(但是如果将JSONObject.paresObject一个具体的实体类就不会出错了)。
(1)前端代码(用过ajax来测试),可以正常操作

  1. console.log("json对象");
  2. var jsonobject = {"jsonobject":"测试josn对象的上传!"};
  3. $.ajax({
  4.     url:"http://localhost:8099/ajaxjsonobject",
  5.     type:"POST",
  6.     data:jsonobject,
  7.     success:function(result)
  8.     {
  9.         console.log(result);
  10.     }
  11. });

(2)前端代码(通过vue的axios来进行测试),运行不正常,需要通过qs模块进行URL序列化,才能获取对象。
(2.1)先下载:npm install qs --save  然后引入qs模块  import qs from "qs";

  1. var josnobject = {"jsonobject":"json对象上传!","jsonobject2":"jsond对象上传2!"};
  2.       var jsonobj = this.qs.stringify(josnobject);
  3.       this.$axios({
  4.         method:"post",
  5.         url:"http://localhost:8099/ajaxjsonobject",
  6.         data:jsonobj
  7.       }).then(result=>{
  8.         console.log(result)
  9.       });

(3)后端代码

  1. @RequestMapping("/ajaxjsonobject")
  2.     @ResponseBody
  3.     public void ajaxjsonobject(@RequestParam Map<String,Object> params)
  4.     {
  5.         String jsonobject = "jsonobject";
  6.         String mapjsonobject = (String) params.get("jsonobject");
  7.         System.out.println("获取对象jsonobject的值:"+mapjsonobject);
  8.         for (String key:params.keySet()) {
  9.             for (Object val:params.values()) {
  10.                 System.out.println(key+":"+val);
  11.             }
  12.         }
  13.     }

2.@RequestBody使用接受的是一个字符串,所以前端得将数据进行JSON.stringify(jsonobject)转换,将转换的数据进行上传,@RequestBody JSONObject jsonobject就能通过getString方法就能直接获取前端传来的字符串数据格式。当然如果是ajax需要加入json字符串的类型,contentType:"application/json"。
(1)前端代码

  1. var josnstringtest = {"jsonstring":"测试字符串上传!"}
  2. var josnstring = JSON.stringify(josnstringtest);//字串转换
  3. console.log(typeof(josnstring));
  4. $.ajax({
  5.     url:"http://localhost:8099/ajaxjsonstring",
  6.     type:"POST",
  7.     //这是提交一个字符串格式。如果不写类型,则默认提交application/x-www-form-urlencoded格式数据
  8.     contentType:"application/json"
  9.     data:josnstring,  //josnstringtest  josnstring
  10.     success:function(result){
  11.         console.log(result);
  12.     }
  13. });

(2)前端代码(通过vue的axios来进行测试),可以正常操作,axios本身就是json字符串格式。

  1. console.log("json字符串测试!");
  2.  //axios本身就对对象进json字符串的处理
  3.  var josnstringtest = {"jsonstring":"测试字符串上传!","jsonstring2":"测试字符串上传2!"};
  4.  this.$axios({
  5.       method:"post",
  6.       url:"http://localhost:8099/ajaxjsonstring",
  7.       data:josnstringtest
  8.  }).then((result)=>{
  9.     console.log(result);
  10.  });

(3)后端代码

  1. @RequestMapping("/ajaxjsonstring")
  2.     @ResponseBody
  3.     public void ajaxjosnstring(@RequestBody JSONObject jsonObject)
  4.     {
  5.         //可以直接获取前端转换好的json字符串数据格式
  6.         String jsonstring = jsonObject.getString("jsonstring");
  7.         System.out.println(jsonstring);
  8.     }

 

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/310200
推荐阅读
相关标签
  

闽ICP备14008679号