vue使用axios发送http请求后端springBoot @RequestParam接收不到,解决办法

本文详细记录了一位开发者在使用Vue.js前端框架与SpringBoot后端框架进行跨域HTTP请求时遇到的问题及解决过程。通过调整Content-Type为application/x-www-form-urlencoded并使用URLSearchParams对参数进行封装,成功解决了@RequestParam参数无法被后端接收到的难题。

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

最近在项目中使用vue.js进行前端开发,刚刚接触vue一路磕磕绊绊遇到了很多问题,在这里记录下解决办法。

 这是我们系统中前端的一个axios发送http请求的部分代码片段,向后台发送http请求,后端springBoot始终接收不到

@RequestParam的参数,看下面:

// 封装axios
const http =axios.create({
  timeout: 1000 * 30,
  withCredentials: true,
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
})

// 发送post请求
this.$http({
    url: 'http://localhost:8080/bindT/1'),
    method: 'post',
    data: {
        ids : ['1','2','3']
    }
}).then(({data}) => {
    if (data && data.code === 0) {
        this.$message({
            message: '操作成功',
            type: 'success',
            duration: 1500
        })
    } else {
        this.$message.error(data.msg)
    }
})
@RequestMapping("/bindT/{type}")
public R bindT(@PathVariable("type") String type, @RequestParam List<String> ids) {
    System.out.println("ids:" + ids.toString());
    return R.ok();
}
2020-07-09 15:15:10.422 ERROR 13316 --- [io-8097-exec-24] c.b.s.c.exception.RRExceptionHandler : 
Required List parameter 'ids' is not present
org.springframework.web.bind.MissingServletRequestParameterException: Required List parameter 'ids' is not present
	at org.springframework.web.method.annotation.RequestParamMethodArgumentResolver.handleMissingValue(RequestParamMethodArgumentResolver.java:204)
	at org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver.resolveArgument(AbstractNamedValueMethodArgumentResolver.java:112)
	at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:124)

在网上也找了好多办法都没有解决,如:修改data里面的内容使用dataForm封装、修改headers等等。最终找到一个解决办法:修改headers信息使用

'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'

并且对参数进行

 URLSearchParams()

封装处理。

效果参考下面:

// 封装axios
const http =axios.create({
  timeout: 1000 * 30,
  withCredentials: true,
  headers: {
    'Content-Type': 'application/json; charset=utf-8'
  }
})

// 对参数进行封装
let searchParams = new URLSearchParams()
searchParams.set('ids', ['1','2','3'])

//发送post请求
this.$http({
    url: 'http://localhost:8080/bindT/1'),
    headers: { //修改头信息,因为只有该处使用,所以不修改全局配置
        'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
    },
    method: 'post',
    data: searchParams
}).then(({data}) => {
    if (data && data.code === 0) {
        this.$message({
            message: '操作成功',
            type: 'success',
            duration: 1500
        })
    } else {
        this.$message.error(data.msg)
    }
})

 后端就可以正常接收了

ids:[1,2,3]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值