前端传递list(数组)类型参数,后端接收失败

踩坑:前端传递list(数组)类型参数,后端接收失败

1.起因

前端使用axios封装之后传递list(数组)类型的参数,在抓包工具network中显示key后面会自动拼接一个[ ] 符号(/user/list?key[ ]=…),导致后端接口是不能正常的进行参数的接收 正确的格式应该是 “/user/list?key=…”

2.示例图

后端接口需要传递的参数类型
后端需要接收的参数类型
如果前端传递list参数浏览器请求的时候就会在key后面自动添加[ ] 符号 导致参数不能正确的传递
在这里插入图片描述
正确的参数传递格式应该是这样
在这里插入图片描述

3.解决办法

  1. 前端在传递list参数时使用paramsSerializer函数将参数进行序列化,然后在传递参数的时候就能得到正确的参数形式
    在这里插入图片描述
  2. 具体步骤:
    1. 首先要引入qs库 import qs from ‘qs’
    2. 然后调用qs.stringify方法即可
  3. qs.stringify在处理数组参数的时候有以下配置项可以实现不同的参数展示形式
    1. qs.stringify({ids: [1, 2, 3]}, {indices: false})
      //形式:ids=1&ids=2&id=3
    2. qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘indices’})
      //形式:ids[0]=1&ids[1]=2&ids[2]=3
    3. qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘brackets’})
      //形式:ids[]=1&ids[]=2&ids[]=3
    4. qs.stringify({ids: [1, 2, 3]}, {arrayFormat: ‘repeat’})
      //形式: ids=1&ids=2&id=3
      所以配置项里面使用indices 和 arrayFormat:‘repeat’ 都是可以的

配置之后参数就能进行正确的传递
在这里插入图片描述
在这里插入图片描述

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
前端传入数组格式给后端时,如果后端使用的是 Spring MVC 框架,那么默认情况下,它会将数组参数转换为 List数组类型。同时,为了能够正常接收数组参数,需要在前端代码中将数组参数的名称设置为类似于 `data[0].name` 这样的格式。 这是因为 Spring MVC 在接收数组参数时,会将数组中的每个元素都封装成一个对象,对象的属性名为数组参数的名称,加上中括号和元素下标,例如 `data[0].name` 表示数组中第一个元素的 name 属性。这种方式可以方便地将数组参数转换为 List数组类型。 在前端代码中,可以使用类似于以下代码的方式设置数组参数的名称: ```javascript var data = [{name: 'foo'}, {name: 'bar'}]; $.ajax({ url: '/api', data: {data: data}, dataType: 'json', type: 'POST', success: function(response) { // 处理响应数据 } }); ``` 在上述代码中,`data` 是一个数组,它包含两个对象,每个对象都有一个 `name` 属性。在发送 AJAX 请求时,将数组参数的名称设置为 `data`,后端就可以通过 `@RequestParam` 或 `@RequestBody` 注解来接收数组参数了。例如: ```java @RequestMapping(value = "/api", method = RequestMethod.POST) public void handleRequest(@RequestParam("data") List<MyObject> data) { // 处理接收到的数组参数 } ``` 在上述代码中,`handleRequest` 方法接收一个名为 `data` 的数组参数,它的类型是 `List<MyObject>`,其中 `MyObject` 表示前端传递的每个对象的类型。Spring MVC 会自动将前端传递数组参数转换为 `List<MyObject>` 类型的对象。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值