功能點/需求:
創建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的操作,隨便你怎麼騷
//...
}