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 }