关于springboot中前端传递多个数组以及其他参数及json在前后端转变方法技巧的记录

  • 文末含一种json的动态解析方法,感兴趣的大佬记得看到最后评论交流 *
    因公司GIS保密要求仅放部分代码在这儿

前端传输json的方法

json格式不再赘述

常规json传递

使用formData封装传递

好处就是当页面同时传递多个数组甚至是同时传递数组和参数到后台,可以自定义json的name甚至是json格式及对value进行自定义 ! 在后台接收的具体格式见下图

{
		//这儿用到了将vue中的对象转换为数组的方法,以便呢能拼接到json中
                    var forms = Object.entries(this.form)
                    let formData = new FormData();
                    // todo 这儿的几个form后期要研究用一个form传递并在后台接收
                    // formData.append("jcsbId",this.form.jcsbId)
                    // formData.append("djyear",this.form.djYear)
                    // formData.append("hfbz",this.form.hfbz)
                    // formData.append("sjbq",this.form.sjbq)
                    formData.append("form",forms)

                    formData.append("jccs",this.scnr)
                    formData.append("lxId",this.lxId)
                    
		//打印formData
                    formData.forEach((value, key) => {
                        console.log("formData","key %s value %s", key, value);
                    })


                    if (this.lxId != null) {
                        dataRecomputed(formData).then(response => {
                            this.$modal.msgSuccess("重算成功");
                            this.open = false;
                        });
                        this.reset();
                        this.lxId = null;
                    }
                }

断点下的解析格式,这里使用了几种json转换的常用的方法,借此图也简单记录一下!
在这里插入图片描述

后端接收前端数据的三种注解方式

三种注解方式

接收formData

使用String[]即为String数组接收可以使用@REquestParam并指定某一个数组进行接收

//根据自定义的name进行接收
( @RequestParam("jccs") String[] jccs , @RequestParam("lxId") String[] lxIds,@RequestParam("form") String[] form){

		//进行简单类型转换应对servicesImpl中的类型转换和接收			见下图
		 List<String> jccs1 = Arrays.asList(jccs);
        List<String> lxIds1 = Arrays.asList(lxIds);

	return toAjax(ptglJcjszkService.changeMessage( lxIds1, jcsbId,hfbz,djyear,sjbq, jccs1));
}

在这里插入图片描述

还可以把数组封装成一个单独的VO,并继承原VO来进行参数的接收

不过个人感觉这种方法太过麻烦,还需要新建一个单独的vo,主要是起名字烦人
在这里插入图片描述

动态解析json记录

demo案例

package util;
 
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import entity.JsonDataVO;
import org.springframework.beans.BeanUtils;
 
import java.io.IOException;
import java.util.*;
 
public class JsonDataUtil {
 
    private void JsonToList(Stack<JSONObject> stObj, List<JsonDataVO> resultList, Integer index) throws IOException {
 
        if (index == null)
            index = 1;
        else
            index++;
 
        if (stObj == null && stObj.pop() == null) {
            return;
        }
        JSONObject json = stObj.pop();
        Set<String> keySet = json.keySet();
        for (String key : keySet) {
            Object value = json.get(key);
            JsonDataVO entity = new JsonDataVO();
            entity.setCurrentFieldVal(key);
            entity.setIndex(index);
            entity.setParentData(json);
            entity.setCurrentData(value);
            resultList.add(entity);
            if (value instanceof JSONObject) {
                stObj.push((JSONObject) value);
                // 递归遍历
                JsonToList(stObj, resultList, index);
            } else if (value instanceof JSONArray) {
                for (Object err : (JSONArray) value) {
                    if (err instanceof JSONObject) {
                        JSONObject errItem = (JSONObject) err;
                        stObj.push(errItem);
                        // 递归遍历
                        JsonToList(stObj, resultList, index);
                    }
                }
            }
 
        }
    }
 
    public List<JsonDataVO> getAllJsonValue(String jsonStr) {
        try {
            List<JsonDataVO> resultList = new ArrayList<JsonDataVO>();
            JSONObject obj = JSON.parseObject(jsonStr);
            Stack<JSONObject> stObj = new Stack<JSONObject>();
            stObj.push(obj);
            this.JsonToList(stObj, resultList, null);
            return resultList;
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
 
    public List<JsonDataVO> getJsonData(List<JsonDataVO> list, Integer index, String fieldName) {
        List<JsonDataVO> tempList = new ArrayList<JsonDataVO>();
        for (JsonDataVO jsonDataVO : list) {
            if (jsonDataVO.getCurrentFieldVal().equals(fieldName)) {
                if (index != null) {
                    if (index.equals(jsonDataVO.getIndex())) {
                        tempList.add(jsonDataVO);
                    }
                } else {
                    tempList.add(jsonDataVO);
                }
            }
        }
        return tempList;
    }
 
 
    /**
     * 基于当前对象,计算level个等级的数据是什么
     *
     * @param list
     * @param jdVo
     * @param parentIndex (从1开始的)
     * @param fieldName
     * @return
     */
    public void getJsonDataByChild(List<JsonDataVO> list, JsonDataVO jdVo, int parentIndex, String fieldName) {
        //3, 1  3-1=2
        int level = jdVo.getIndex() - parentIndex;
        JsonDataVO temp = new JsonDataVO();
        BeanUtils.copyProperties(jdVo, temp);
        for (int i = 1; i <= level; i++) {
            int index = jdVo.getIndex() - i;
            List<JsonDataVO> tempList = new ArrayList<JsonDataVO>();
            list.forEach(a -> {
                if (a.getIndex() == index) {
                    tempList.add(a);
                }
            });
            if (tempList != null && tempList.size() > 0) {
                for (JsonDataVO jsonDataVO : tempList) {
                    if (jsonDataVO.getCurrentData() instanceof JSONArray) {
                        JSONArray jsonArray = (JSONArray) jsonDataVO.getCurrentData();
                        for (Object jObj : jsonArray) {
                            if (JSON.toJSONString(jObj).equals(JSON.toJSONString(temp.getParentData()))) {
                                temp = new JsonDataVO();
                                BeanUtils.copyProperties(jsonDataVO, temp);
                                break;
                            }
                        }
                    } else {
                        if (JSON.toJSONString(jsonDataVO.getCurrentData()).equals(JSON.toJSONString(temp.getParentData()))) {
                            temp = new JsonDataVO();
                            BeanUtils.copyProperties(jsonDataVO, temp);
                            break;
                        }
                    }
                }
            }
        }
    }
 
 
}

Vo
package entity;
 
import com.alibaba.fastjson.JSONObject;
 
public class JsonDataVO {
 
    private int index;
    private JSONObject parentData;
    private Object currentData;
    private String currentFieldVal;
 
    public int getIndex() {
        return index;
    }
 
    public void setIndex(int index) {
        this.index = index;
    }
 
    public JSONObject getParentData() {
        return parentData;
    }
 
    public void setParentData(JSONObject parentData) {
        this.parentData = parentData;
    }
 
    public Object getCurrentData() {
        return currentData;
    }
 
    public void setCurrentData(Object currentData) {
        this.currentData = currentData;
    }
 
    public String getCurrentFieldVal() {
        return currentFieldVal;
    }
 
    public void setCurrentFieldVal(String currentFieldVal) {
        this.currentFieldVal = currentFieldVal;
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值