前臺要傳入到後臺的數據是兩個有關聯的實體對象,後臺如何接收更有效

功能點/需求:
創建Topic,有多個屬性,下圖對象1要插入一個表,實體對象爲Entity1,對象2是另一個關聯表,有多條數據要插入,實體對象爲Entity2,現在要將前臺的這些數據用有效的方法接收
在這裏插入圖片描述
前臺數據格式:

var data = {
	"topicName" : name,
	"dataSource" : source,
	//...
	"fields" : [{name: 'xxx', type: 'xx'},{name: 'xxx', type: 'xx'},{name: 'xxx', type: 'xx'}]
}

先來一個錯誤(算不上錯誤,應該是有點蠢)的轉換方式:
前臺用ajax以GET方式提交,後臺以Map方式接收,由於最終要插入多條實體對象的數據,傳到後臺的JSON格式的數據要依次解析,反正當時JSONObject和JSONArray之間的轉換啥的給我繞的暈乎乎的

//解析實體對象1
//將每個屬性都拿出來,分別set到實體對象1中
String topicName = (String) maps.get("topicName");
entity1.setName(topicName); //new Entity1的過程就不寫了
//...

//解析實體對象2
String fields = (String)maps.get("fields"); //fields是[{id, name, age},{id, name, age},{id, name, age},{id, name, age}]格式的json字符串
JSONArray fieldsArr = JSONArray.fromObject(fields);
for(Object obj :fieldsArr) {
	JSONObject jsonObject = JSONObject.fromObject(obj); 
	FieldInfoEntity fieldInfo = (FieldInfoEntity)JSONObject.toBean(jsonObject, Entity2.class);
	
}

更有效率的數據傳遞方法 :
前臺傳遞的格式還是和上面一樣, 在實體Entity1中加入一個Entity2的List泛型,把Eentity2當作Entity1的屬性,這樣,就可以直接接收Entity1實體對象

//Entity1
private id;
//省略一堆Entity1的屬性
//將Entity2作爲屬性添加到Entity1的實體中,根據實際情況判斷是什麼類型,由於需求上Entity2是有很多條要插入,所以用List
private List<Entity2> entity2Infos = new ArrayList<Entity2> ();
//--------------------------這裏是分割線-------------------

//controller中
@RequestMapping("create")
public void create(@RequestBody Entity1 entity1){
   //對Entity1的操作,比如插入啥的
   //...兩表之間的關聯靠插入Entity1後返回的id,有些操作就省略了
   
   //取出Entity2
   List<Entity2> entity2 = entity1.getEntity2Infos();
   //對Entity2的操作,隨便你怎麼騷
   //...
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章