Vue+SpringBoot:前端向后台传送多参数

传参(包括不同类型)

前端包装,后台通过map进行参数的接收。
参数包括普通数据类型及数组

前端传参(vue)

const { data: res } = await this.$http.post(''xxx,
          {
            pipeId: this.table.pipeId,
            year1: this.table.year1,
            year2: this.table.year2,
            differenceValue: this.table.differenceValue,
            nodes1: this.nodes1,
            nodes2: this.nodes2
          })

其中node1、node2为复选框勾选的数组,其他的为int或String型
传输的数据为无“引号”的数据
后台JSONArray处理将其转化

后台接收

public ResultType function(@RequestBody Map<String,Object> datas){
        int pipeId = (int) datas.get("pipeId");
        int year1 = Integer.parseInt(datas.get("year1").toString());
        int year2 = Integer.parseInt(datas.get("year2").toString());
        double differenceValue= (double) datas.get("differenceValue");
        // 先转化成json数组,再转换成对象List
        JSONArray array1 = JSONArray.parseArray(JSON.toJSONString(datas.get("nodes1")));
        List<PipeFeatureList> nodes1 = JSONObject.parseArray(array1.toString(), PipeFeatureList.class);
        JSONArray array2 = JSONArray.parseArray(JSON.toJSONString(datas.get("nodes1")));
        List<PipeFeatureList> nodes2 = JSONObject.parseArray(array2.toString(), PipeFeatureList.class);
        return ResultType;
    }

问题出现

仅通过@RequestParam或者@RequestBody接收数据,或者两者结合,暂时无法调通前后端的参数的传输,故采用map接收多参数,从map中获取的前端传输的json(未经过stringify处理),在后台打印的数据类型为

LinkedHashMap型。
接收的json数组为ArrayList型,由于接口参数需求,需要将nodes1,nodes2转化成List,转化方法为:
1.先将数据转化成json数组
JSONArray array = JSONArray.parseArray(JSON.toJSONString(datas.get(“nodes1”)));
2.将json数组转化成List
List nodes1 = JSONObject.parseArray(array.toString(), T.class);

若前端传数据将其stringify处理后,后台打印的数据将以?data1=value1&data2=value2的形式以String呈现。

Logo

前往低代码交流专区

更多推荐