在前端和后端之间
传递数组
时,由于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() 方法进行处理。
因为@RequestBody只能使用一次,所以此时使用实体类User获取不到所有属性,此时我们需要创建一个UserDTO继承User,且给他加入其他传入参数属性。对于Map,值的类型建议设置为Object,这样可以使Map能接收各种类型的
数据
,如
字符串
、数字、
数组
和对象等。
前端
传来的是一个
json
对象时:{'id'=1,'name'='ww'},可以用Map来获取。若
前端
传递
过来的
数据
刚好和我们的bean实体对象属性一致,则可以使用对象的形式接收。后台Controller。
前面我们说过,现在比较流行的开发方式为异步调用。前后台以异步方式进行交换,传输的
数据
使用的是
JSON
,所以
前端
如果发送的是
JSON
数据
,
后端
该如何接收?
对于
JSON
数据
类型,我们常见的有三种:
json
普通
数组
([“value1”,“value2”,“value3”,…])
json
对象({key1:value1,key2:value2,…})
json
对象
数组
([{key1:value1,…},{key2:value2,…}])
对于上述
数据
,
前端
如何发送,
后端
如何接收?
JSON
普通
数组
后端
用split
方法
将
字符串
转化成
数组
2.
json
数组
如 var
json
Array = [{name: ‘张三’, value: ‘18’}, {name: ‘李四’, value: ‘12’}]
前端
直接将
json
数组
传给
后端
当我们想要
前端
实现批量操作功能时(例如:勾选多个想要内容,再一键删除),可以把想要删除的内容的唯一标识(例如:ID)保存在一个
数组
中,接着通过Axios把此
数组
发送到
后端
,
后端
控制层用List集合接收,再进行实际的删除操作,最后达到我们想要的效果,那我们该怎么实现呢?