• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
は's北見えり
博客园    首页    新随笔    联系   管理    订阅  订阅

vue 数组作为请求参数,后台接收不到?

vue+axios请求数据,以数组作为参数时。Qs.stringfly和Qs.parse方法都试过,后台接收到的数据大小还是为0.

以如下代码,后台可以接收到。

1 let param =  new URLSearchParams();
2 param.append('threshold_data',JSON.stringify(this.data));
3 param.append('ip',this.ip);
4 ...
5 axios({
6     ...
7     data: param
8 })

参考文档:https://download.csdn.net/download/weixin_38628211/13658162

但后台接收到的数据数组的外边会再多一个[],而且get(0)方法得到结果为第一个逗号为止,而不是数组第一个数据项。也就是说后台能得到,但数据结构其实是不对的。

最后多次试验得到正确方法:

1 let data = {threshold_data:this.data,ip:this.ip}
2 ...
3 axios({
4     ...
5     data: Qs.stringify({jsonStr: JSON.stringify(data)})
6 })

也就是说axios的data还是要正常的Qs进行序列化,但其中有数组在的原因,要再进行一次json转换,后台才能正常识别。

后台把其当作一个字符串来接收,而不是实体类。

后台参考文档:Java后台接收前端传递的数组对象参数的处理 by:freshman2020 @csdn(这其中的前端部分经测试是无效的。要再加一次Qs序列化,如上边代码)

 1 @PostMapping(value = 'url',produces = "application/json")
 2 public void upsertXxx(String jsonStr) {
 3     // 这里使用的alibaba的fastjson包
 4     // 先将字符串转换为JSON对象
 5     JSONObject jsonObj = JSONObject.parseObject(jsonStr);
 6     // 使用toJavaObject()方法将其转换为Xxx对象
 7     // Xxx对象中的list集合也会得到相应的值
 8     Xxx xxx= jsonObj.toJavaObject(Xxx.class);
 9     ...
10     // 业务实现
11     ...
12 }

 

posted @ 2021-02-25 18:06  は'sEriKitami  阅读(860)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3