前后台数据交互的时候还是使用String吧。
先描述下我的整个前后台数据交互的过程:
1.前台发送请求获取一个商品列表
2.后台发送一个列表给前台
3.前台接收后,取出该列表的子列表,再传送给后台
4.后台接收到该列表后,进行处理
整个数据交互的过程已经描述完毕。
我的处理方案是:
1.后台接收带请求后,将该list转换成JSONArray对象,然后将其再转换成为String类型的数据发送给前台。
2.前台收到该数据后,直接放入其对应的变量中。取出需要的子列表后,用js将其转换称为json的String类型
3.后台用String类型接收后,再将其转换为JSONArray,再继续将JSONArray转换称List类型的,后台再继续处理它需要的逻辑。
贴上会让人觉得很懵的代码:(listGoodsByQ方法返回的是JSONArray类型)
1.前台发送请求获取一个商品列表
search: function () { console.log("搜索商品"); axios.get('../../WeChatMaterial/search?q=' + app.query) .then(function (response) { // console.log(response.data); app.searchList = response.data; }) },2. 后台发送一个列表给前台
//获取商品列表 @GetMapping("search") @ResponseBody public void searchByQ(HttpServletResponse response, String q) { try { response.setCharacterEncoding("utf-8"); PrintWriter writer = response.getWriter(); log.info(youzanAPIManager.listGoodsByQ(q)); writer.print(youzanAPIManager.listGoodsByQ(q).toString()); writer.flush(); writer.close(); } catch (IOException e) { log.error(ExceptionUtils.getTraceInfo(e)); } } 3.前台接收后,取出该列表的子列表,再传送给后台(前台的变量) query:"", goods:[],//传到后台 goodsList:[], searchList:[](在获取传回的searchList时,查看控制台它的格式是[recommendation(id=111 name=商品1).....]大概就是这样的,因为时间久了,突然想来才写的博客 )
这个代码就是提交了个表单 (goodsList是’原生‘的子列表 在提交表单的时候,查看控制台可以看到她的格式[Object object])
app.goods = JSON.stringify(app.goodsList);4.后台接收子列表
//添加文章 @PostMapping("insert") @ResponseBody public Object insertWeChatMaterial(HttpServletRequest request, RecommendationItem recommendationItem, GoodsArticle goodsArticle, String goods) { try { UserInfo userInfo = (UserInfo) request.getAttribute("userInfo"); log.info("goodsList--" + goods); JSONArray array = JSONArray.fromObject(goods); List<RecommendationGoods> goodsList = (List<RecommendationGoods>) JSONArray.toCollection(array, RecommendationGoods.class); recommendationItem.setName(goodsArticle.getTitle()); Boolean flag = recommendationItemService.saveMaterial(recommendationItem, goodsArticle, goodsList); if (flag) { return ResponseObject.successWith(userInfo.getDisplayName(), null); } else { return ResponseObject.failWith(500, "数据添加失败!"); } } catch (Exception e) { log.error(ExceptionUtils.getTraceInfo(e)); return ResponseObject.failWith(500, e.getStackTrace().toString()); } }