前端传递JSON数组数据到后端(解析方法)

        在前端和后端之间传递数组时,由于HTTP协议的限制,无法直接传递数组类型的参数。
请求参数需要被转换为字符串格式传递给后端,所以需要通过 JSON.stringify() 方法将 gradeIdArray 数组转换为一个 JSON 字符串,并将其作为参数传递给后端。

add(){
      // 将选中的权限等级的 ID 转换为整数类型,并存储在一个数组中
      let gradeIdArray = []
      for (let i = 0; i < this.selectGradeArray.length; i++) {
        gradeIdArray.push(parseInt(this.selectGradeArray[i]))
      }
      // 发送 POST 请求,将角色名称和权限等级的 ID 数组传递给后台
      axios.post('/project/role/add', {
          roleName: this.addObj.name,
          gradeIdArray: JSON.stringify(gradeIdArray)
      }).then(resp => {
        if (resp.data === 'ok') {
          alert('添加成功')
          // 清空
          this.addObj.name = ''
          this.selectGradeArray = []
        } else {
          alert('添加失败')
        }
    });
  }

        在后端的控制器方法中,需要使用 @RequestBody 注解来接收前端传递过来的 JSON 数据,并将其转换成对应的 Java 对象

  @PostMapping("add")
    public String add(@RequestBody Map<String, Object> params) {
        String roleName = (String) params.get("roleName");
        String gradeIdArrayJson = (String) params.get("gradeIdArray");
        ObjectMapper mapper = new ObjectMapper();
        List<Integer> gradeIdList = null;
        try {
            gradeIdList = mapper.readValue(gradeIdArrayJson, new TypeReference<List<Integer>>() {});
        } catch (JsonProcessingException e) {
            e.printStackTrace();
        }
        roleService.add(roleName, gradeIdList.toArray(new Integer[0]));
        return "ok";
    }

        使用 @RequestBody 注解来接收前端传递过来的 JSON 数据,并使用 Jackson 库中的 ObjectMapper 对象将其转换成一个 List<Integer> 对象。

        在转换过程中,使用 TypeReference类来指定转换的目标类型为 List<Integer>。

        然后,再将转换后的 List<Integer> 对象转换成一个 Integer 数组,并将其传递给 roleService.add() 方法进行处理。

猜你喜欢

转载自blog.csdn.net/m0_74421344/article/details/130919730
今日推荐