- 文末含一种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;
}
}