在前端和后端之间传递数组时,由于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() 方法进行处理。