zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    SD_WebImage-03-多线程+下载任务放入非主线程执行
    NSOperationQueue_管理NSOperation-02-多线程
    CALayer小结-基本使用00-UI进阶
    XMPP-UI进阶-01
    XMPP总结-UI进阶-00
    UI控件总结-UI初级
    转场动画-01-day4
    暂停-开始动画-核心动画-08-day4
    核心动画-04-CALayer隐式动画
    Android开发技术周报 Issue#71
  • 原文地址:https://www.cnblogs.com/bjhl/p/14448461.html
Copyright © 2011-2022 走看看