フロントエンドとバックエンドの間で配列を渡す場合、HTTP プロトコルの制限により、配列型のパラメーターを直接渡すことはできません。
リクエスト パラメーターは文字列形式に変換してバックエンドに渡す必要があるため、gradeIdArray 配列を JSON.stringify() メソッドを通じて 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() メソッドに渡します。