在最近的项目中要求实现前后端分离,于是大量使用了ajax传值、接值。在添加了外键的子表增删查改时都需要同时传递所关联的主表信息,即包含对象属性的对象。
1.查询子表所有信息,代码如下
@RequestMapping("/query") public void getall(TB_INFOR infor, HttpServletResponse response) throws Exception { String[] str = { "infor_id" }; Object[] obj = { infor.getId() }; List<ProductsInfo> ProductsList = productsInfoService.findList(str, obj); JsonConfig jsonConfig = new JsonConfig(); jsonConfig.setIgnoreDefaultExcludes(false); jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT); // 防止自包含 if ("companybasicinfo" != null) { // 这里是核心,过滤掉不想使用的属性 jsonConfig.setExcludes(new String[] { "companybasicinfo" }); } JSONArray ja = JSONArray.fromObject(ProductsList, jsonConfig); response.getWriter().print("successCallback(" + ja.toString() + ")"); }
注意点:其中在将查询结果list转成json格式时需要防止自包含,即防止转换时出现死循环!
2.修改子表信息,代码如下
@RequestMapping("/update") public void updateProductsById(String data, HttpServletResponse response) throws Exception { JSONObject json = new JSONObject(); try { JsonObject js = (JsonObject) new JsonParser().parse(data); JsonObject jo = js.get("0").getAsJsonObject(); JSONObject jsonObject = JSONObject.fromObject(jo.toString()); Object pojo = JSONObject.toBean(jsonObject, ProductsInfo.class); ProductsInfo productsInfo = (ProductsInfo) pojo; productsInfoService.update(productsInfo); json.put("oper", "操作成功!"); response.getWriter().print("successCallback(" + json.toString() + ")"); } catch (Exception e) { json.put("oper", e.getMessage()); response.getWriter().print("successCallback(" + json.toString() + ")"); } }
注意点:JsonObject为goolgle.gson.JsonObject类,需要自行下载导入。
由于这里前台传递的参数为String类型,为json字符串,需解析后才可以将参数与实体类对应起来。