springcloud发布resful,前端用axios请求后台

本文探讨了SpringCloud RESTful API与前端Axios请求之间的Content-Type不匹配问题,详细解释了不同Content-Type(如application/json与application/x-www-form-urlencoded)在前后端交互中的作用,并提供了调整Axios配置及后端参数接收方式的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

      springcloud发布resful,前端用axios请求后台,发现后台的参数获取都是null。开始以为是哪里写错了,折腾了很久。后来上网搜到了解决方案,根源在于前端用axios发送请求时Content-Type默认是application/json;charset=UTF-8。而后台用的Content-Type是'Content-Type': 'application/x-www-form-urlencoded'。两者不一致导致。

下面是axios的post请求常见的数据格式(content-type)

  1. Content-Type: application/json : 请求体中的数据会以json字符串的形式发送到后端
  2. Content-Type: application/x-www-form-urlencoded:请求体中的数据会以普通表单形式(键值对)发送到后端
  3. Content-Type: multipart/form-data: 它会将请求体的数据处理为一条消息,以标签为单元,用分隔符分开。既可以上传键值对,也可以上传文件

知道原因后,所以有几种解决方案:

一种是修改axios的内容类型,如下:

全局方式:axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded';

请求时指定方式:

axios({ headers: { 'Content-Type': 'application/x-www-form-urlencoded' }, method: 'post', url: '/api/lockServer/search', data: {xxx: 'xxx'} })

另一种是后台使用Map<String,Object> params参数来接收:

GET请求时可以用@RequestParam Map<String,Object> params,也可以用@RequestBody Map<String, Object> params;POST请求只能用@RequestBody Map<String, Object> params。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值