前端发送请求
/**
* 获取数据列表
*/
getDataList() {
// 设置数据加载状态为 true
this.dataListLoading = true;
// 构建参数对象
let params = {
page: this.pageIndex, // 当前页码
limit: this.pageSize, // 每页数据条数
sort: 'id', // 排序字段
order: 'desc', // 排序顺序
}
// 如果搜索表单中的类型不为空,则添加类型参数
if (this.searchForm.type != '' && this.searchForm.type != undefined) {
params['type'] = '%' + this.searchForm.type + '%' // 搜索类型参数
}
// 从本地存储中获取用户信息并转换为对象
let user = JSON.parse(this.$storage.getObj('userForm'))
console.log(user) // 打印用户信息
// 发起 HTTP 请求获取数据
this.$http({
url: "position/type/page", // 请求的 URL
method: "get",
params: params // 传递的参数对象
}).then(({ data }) => {
if (data && data.code === 0) {
this.dataList = data.data.list; // 更新数据列表
this.totalPage = data.data.total; // 更新总页数
} else {
this.dataList = []; // 清空数据列表
this.totalPage = 0; // 总页数置为 0
}
// 设置数据加载状态为 false
this.dataListLoading = false;
});
}
后端接收请求
/**
* 后端列表
*/
@RequestMapping("/page")
public Result page(@RequestParam Map<String, Object> params, PositionType positionType, HttpServletRequest request) {
EntityWrapper<PositionType> ew = new EntityWrapper<PositionType>();
PageUtil page = positionTypeService.queryPage(params, MPUtil.sort(MPUtil.between(MPUtil.likeOrEq(ew, positionType), params), params));
return Result.ok().put("data", page);
}
今天在调试项目的时候发现前端发送请求的时候只传递了一个参数params,后端也使用了@RequestParam注解修饰的params参数进行接收,我原以为positionType参数不会被赋值,没想到竟然也封装上了数据,此时positionType参数中的type字段被封装上了数据,我尝试添加其它包含type字段的类在参数上,发现也成功赋上了值,使用String修饰的type变量也能成功赋值,说明Spring MVC对参数的赋值不是单一的。
关于后端方法参数的接收:
@RequestParam Map<String, Object> params 参数会获取请求中的所有查询参数,并将其封装到一个 Map 中。
PositionType positionType 参数会尝试将请求中的参数值映射到 PositionType 对象的属性上,如果请求中有与 PositionType 对象字段名对应的参数值,那么这些参数值会被映射到 positionType 参数上。
HttpServletRequest request 参数是 Spring MVC 默认注入的请求对象,可以用于获取请求的详细信息,与其他参数无直接关联。
总结:
Spring MVC 在处理控制器方法参数时,会按照以下顺序进行参数绑定:
基于请求方法的参数绑定:如果方法参数中有 @RequestParam、@PathVariable、@RequestBody 等注解标记的参数,Spring MVC 会首先根据这些注解进行参数绑定。例如,@RequestParam Map<String, Object> params 就是一个通过 @RequestParam 注解进行参数绑定的例子。
对象参数绑定: 如果方法参数中有一个对象类型的参数,Spring MVC 会尝试将请求中的参数值映射到这个对象的属性上。这个过程称为对象参数绑定或者对象字段映射。