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 }
原文地址:https://www.cnblogs.com/bjhl/p/14448461.html