@Requestparam和@RequestBody接受区别以及异步ajax和axios传参区别

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

console.log("json对象");
var jsonobject = {"jsonobject":"测试josn对象的上传!"};
$.ajax({
    url:"http://localhost:8099/ajaxjsonobject",
    type:"POST",
    data:jsonobject,
    success:function(result)
    {
        console.log(result);
    }
});

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

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

(3)后端代码

    @RequestMapping("/ajaxjsonobject")
    @ResponseBody
    public void ajaxjsonobject(@RequestParam Map<String,Object> params)
    {
        String jsonobject = "jsonobject";
        String mapjsonobject = (String) params.get("jsonobject");
        System.out.println("获取对象jsonobject的值:"+mapjsonobject);
        for (String key:params.keySet()) {
            for (Object val:params.values()) {
                System.out.println(key+":"+val);
            }
        }
    }

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

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

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

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

(3)后端代码

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

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值