axios传输post参数后台无法转换

问题:使用 @RequestBody 接收前端 post 过来的 JSON 对象,对象转换失败为null。

框架:前端Vue.js使用 Axios 与后台交互,后台 SpringMVC 使用 @RequestBody 接收前台传输的 JSON 参数。

经使用 Jmeter模拟 post请求 和 F12 分析,系因使用 axios 传参时使用了错误的写法导致生成给后台的 JSON 错误:

错误写法:

this.$axios.post('http://localhost:1234/test/payAdd', {
                params: {
                    user:'test',
                    ID:'1234',
                }
            }).then((response) => {
               //TODO
            }).catch(error => {
                //TODO
            })
            

这种带’params’关键字的写法只用于 get 请求,在 post 请求中,如果也这么写,
那么会导致 http 正文 payload 里的 JSON 字符串变为:

{params:{"user":"test","ID":"1234"}}

这样的 JSON 字符串,@RequestBody 无法解析。

而正确的写法:

this.$axios.post('http://localhost:55321/test/payAdd',
                {
                    payTransId:'XNO',
                    rsnCd:'4512',
                    insPID:'01020000',
                    payTransAt:'101.23',
                    remark:'test',

                }

这样生成出来的JSON串才是对的:

{"user":"test","ID":"1234"}

@RequestBody 也能够正常解析成对象。

针对 axios http 请求的写法,也可以使用 axios API 的写法:

axios API
Requests can be made by passing the relevant config to axios.

axios(config)
// Send a POST request
axios({
  method: 'post',
  url: '/user/12345',
  data: {
    firstName: 'Fred',
    lastName: 'Flintstone'
  }
});

具体写法请参考:
axios–github

另外,网上一众帖子说的将 http 的 Content-Type 由 axios 默认的 application/json
修改为 form-data 使用的 application/x-www-form-urlencoded 形式,并非好的解决方案。
Restful 形式的请求交互,就应该使用 application/json 形式。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值