vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收

这篇具有很好参考价值的文章主要介绍了vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近在做自己项目中,做一个非常简单的新增用户场景,但是使用原生axios发送post请求的时候,还是踩了不少坑的。

唉,说多了都是泪,小小一个新增业务,在自己前后端一起开发的时候,硬是搞了好久。

下面就把问题总结分享下,防止后人再踩坑。

接口定义

首先先看下我的接口定义吧。

其实就是一个很简单的新增,参数也不复杂。只是一个json实体的user对象

  @PostMapping(value = "/save")
    public Result save(@RequestBody User user) {
        return Result.ok(userService.saveUser(user));
    }

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

起初我用apifox是这么调用的,直接在json body里面写参数和值:

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

后端也是正常接收的:

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

ok,其实到了这我心里一阵暗爽,这不就妥了嘛,前端随便写点传进来不就完事了,但是还真不是这么简单!

前端代码

先看下我的业务吧,就是点击新增按钮跳出来一个表单,填写信息提交后端

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

我现在使用的是原生的axios,还没进行封装,我的很多坑都是因为原生导致的。我打算做完这个模块再进行封装,先体验下原生的感觉。

首先我是这么写的:

这里可以简单说下

发送get请求都是传递param,发送post请求都是传递data

由于我发送请求之前就把表单数据定义成一个叫data的变量,完整写法应该是:

data:data // 由于key和value一致,可以简写为data

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

 // 新增用户信息
    saveUserInfo(){
        let data = this.ruleForm;
        axios.post('http://localhost:9090/user/save',{data},{
          headers: {
            "Content-Type":"application/json"
          },
         
      }).then(res =>{
          // 请求成功状态为200说明添加成功
          if(res.data.status===200){
            // 关闭用户新增表单弹窗
             this.dialogFormVisible=false,
             // 添加成功提示
            this.$message({showClose: true, message: '添加成功!',type: 'success', duration:2000,center:true});
            // 重新刷新列表数据
            this.queryUserList();
          }
        }).catch(error =>{
            console.log(error)
        })
    },

发送请求并发现问题

上面代码写完直接运行,直接通过network查看请求

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

仔细一看好像没有什么问题吧,但是我在后端打了断点,一看,我的数据没了:

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

解决问题

然后我仔细分析,发现是因为数据的外面报了一层data:{}结构,经过请教圈子里面的大佬,发现问题所在:

就是data被花括号包起来了,去掉即可解决问题!

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

saveUserInfo(){
        // 表单数据
        let data = this.ruleForm;
        axios.post('http://localhost:9090/user/save',data,{
          // json格式
          headers: {
            "Content-Type":"application/json"
          },
    },

再次运行,解决问题:

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

后端也正常接收数据了:

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

至此问题解决

小插曲

下面是一个小插曲,就是有朋友和我说需要用qs进行转换下表单数据,但是我试过了。和这个参数转换问题无关,

安装qs插件

直接执行命令:

npm install qs

这个包很小哇,安装起来很快的:

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

引用qs

安装完之后,就可以使用qs了,直接在文件中引用

// 引用qs
import qs from 'qs'

使用qs

引用qs完后,就可以使用它把对象格式化为一个字符串,一行代码即可

 // 使用qs对象格式化为一个字符串
        qs.stringify(this.ruleForm)

vue post请求要加@requestbody,Vue,SpringBoot,json,vue.js,前端

总结

感觉还是挺简单的,但是还是很有必要封装下。

解决问题一定要精确定位,要多尝试,这里引用艾克一句话送给大家:

我宁愿犯错,也不愿什么都不错文章来源地址https://www.toymoban.com/news/detail-780752.html

到了这里,关于vue使用axios发送post请求携带json body参数,后端使用@RequestBody进行接收的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在Vue中使用axios发送post请求时,可能会出现后端无法接收到参数的情况。

    在Vue中使用axios发送post请求时,可能会出现后端无法接收到参数的情况。这个问题的原因是axios默认发送的请求是json格式的,而后端接收的请求是form表单格式的,这就导致后端无法获取json格式的请求参数。解决这个问题可以通过设置axios的请求头部信息,将请求格式设置为

    2024年02月16日
    浏览(49)
  • vue3使用axios发送post请求,后台接收到的参数总是null,使用postman测试后台是能接收数据的

    使用vue3,连基本的请求都失败了,使用浏览器查看post请求,参数中是有值,但是传到后台,每个参数都是null,不知道哪里错了。排除了后台的错误,就剩下了vue代码的错误了。我出错的地方是vue使用axios发送post请求的时候,参数格式写错了。 直接贴代码了,正确的写法 f

    2024年02月13日
    浏览(45)
  • 【微信小程序】使用 wx.request 方法来发送POST网络请求,携带RequestBody参数

    在微信小程序中,你可以使用 wx.request 方法来发送网络请求。以下是将上述 Java 代码转换为微信小程序版本的示例: 在上述代码中,我们使用 wx.request 方法发送 POST 请求,并将请求的 URL、请求体数据、请求头等信息进行相应的设置。请求成功后,会在回调函数的 success 中处

    2024年02月15日
    浏览(56)
  • Flutter携带JSON参数post请求

    在Flutter中发送带有JSON参数的网络请求,你可以使用HTTP库(如 http 或 dio )来实现。以下是使用 http 库发送网络请求并携带JSON参数的示例: 在上述示例中,首先创建一个参数Map,并将其转换为JSON字符串。然后设置请求头,使其指明请求类型为JSON。最后使用 http.post() 方法发送

    2024年02月14日
    浏览(53)
  • 再vue项目中使用axios原生发送post请求

    前言:在大多数项目开发中,都是采用前后端分离架构,在此情况下都采用一些成熟的框架,类似于ruoyi,因为成熟所以前端的请求都进行了各种封装,有时想单独发起一个简单的请求,还有点麻烦,因此记录一下。 因为是前后端分离,当前前端使用的端口是81,后端运行的

    2024年02月14日
    浏览(49)
  • 糊涂工具类(hutool)post请求设置body参数为json数据

    大家好,我是雄雄,欢迎关注微信公众号 雄雄的小课堂 今天介绍一个案例,糊涂工具类(hutool)post请求设置body参数为json数据,刚开始写的总是报错,下面是正确的代码: 重点是下面的这行代码:

    2024年02月16日
    浏览(52)
  • axios的put/post请求携带一个string 类型的参数, 前端代码和后端接收方法

    使用axios发送post请求, 后端支持接收单个字段 想要让后端支持接收单个字段,前端就必须是 FormData 格式或 x-www-form-urlencoded 格式,所以参数对象就不能是简单的js对象了,具体代码如下: 后端使用@RequestParam注解接收。 使用axios发送post请求, 后端整体接收json对象 前端代码 da

    2024年02月07日
    浏览(67)
  • VUE项目使用axios发送post跨域请求,返回数据失败问题

    Access to XMLHttpRequest at \\\'http://xxxx\\\' from origin \\\'http://localhost:8080\\\' has been blocked by CORS policy: Response to preflight request doesn\\\'t pass access control check: No \\\'Access-Control-Allow-Origin\\\' header is present on the requested resource. 第一步 ,在后端接受方,对返回的数据添加 响应头 ,使用下面这句代码: 第二步

    2024年02月11日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包