Spring MVC 参数绑定的工作机制

前端发送请求

		/**
		 * 获取数据列表
		 */
		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 会尝试将请求中的参数值映射到这个对象的属性上。这个过程称为对象参数绑定或者对象字段映射。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值