记一个前端直接发送js对象,Java后台接收的例子

   /**
     * 更新角色-权限信息,包含以下参数:
     * 

* id 当前角色的id * ids 当前角色-权限的id集合 * parents 当前角色-权限的是否是父节点的parent集合 * *

* 之前在User层面上,我们要对其进行角色的更新,也就是说在User用户层面上更新权限,只需要维护用户-角色表数据。 * 而在角色层面上,只需要维护角色-权限表数据。 *

* 误区:始终要记得,同一个角色拥有不同权限的情况是不存在的,如果两个用户拥有不同的权限,那么他们一定拥有了不同的角色 * * @return * @Param dataMap 以上参数数据的Map集合 * *

* 为什么要用Map接收? * 如果想要传递对象(如数组)参数,ajax就必须发送post请求,而post请求传递对象参数就要用JSON.stringify()格式化数据为JSON字符串才能传递; * 一旦使用了JSON.stringify()格式化数据,传递的就是JSON字符串,后端必须使用String类型接收,而我们传递的数据中包含了普通变量、数组等多种数据,所以使用使用Map接收,并指定泛型是String类型 * *

* 前端传递进来的参数在Map中封装的数据结构类似: * {0:{key: id, value: {....}}, 1:{key: ids, value: {...}}, 2:{key: parents, value: {...}}} */ @ResponseBody @RequestMapping(value = "/updateRolesPermissions", method = RequestMethod.POST) public Result updateRolesPermissions(@RequestBody Map dataMap) { try { //重要的地方 Long id = Long.valueOf((String) dataMap.get("id")); //当前操作角色的id ArrayList ids = (ArrayList) dataMap.get("ids"); //当前角色更新的权限id的集合体 ArrayList parents = (ArrayList) dataMap.get("parents"); //当前更新的角色权限parent信息 // 更新角色的权限关系即需要维护角色-权限表,前端传来了什么数据? 1、角色id;2、被选中的权限Id集合。 // 如何更新角色的权限?我们常会想到,根据表的主键update呀,但是,因为页面上展示的数据是后端构建的ZTree实体类JSON数据,其中并不包含表的主键值 // 所以,这里就采取一种比较极端的方式,先删除此角色所有关联的权限id,再依次关联此角色当前更新的权限id //先删除此角色关联的所有权限id roleService.deleteAllRolePermissions(id); //再依次关联此角色更新的权限id for (int i = 0; i < ids.size(); i++) { if (!(boolean) parents.get(i)) { //不是父节点才进行关联,因为父节点是角色,子节点才是权限 roleService.correlationPermissions(id, Long.valueOf(String.valueOf(ids.get(i)))); } } System.out.println(dataMap); return new Result(true, "更新数据成功"); } catch (Exception e) { e.printStackTrace(); return new Result(false, "发生未知错误"); } }

注意因为例子用了@RequestBody所以不能用于contentType是form-data方式的请求

你可能感兴趣的:(表单提交,J2EE,json)