springmvc 源码初探01

今天遇到了个奇怪的问题,使用springmvc从前端往后端传参数的时候,参数死活传不进去。

后来看了一下springmvc参数封装的过程,恍然大悟。

springmvc参数封装的过程中有个类是这样的。

org.springframework.web.bind.WebDataBinder

他有个方法

/**
	 * Check the given property values for field defaults,
	 * i.e. for fields that start with the field default prefix.
	 * <p>The existence of a field defaults indicates that the specified
	 * value should be used if the field is otherwise not present.
	 * @param mpvs the property values to be bound (can be modified)
	 * @see #getFieldDefaultPrefix
	 */
	protected void checkFieldDefaults(MutablePropertyValues mpvs) {
		if (getFieldDefaultPrefix() != null) {
			String fieldDefaultPrefix = getFieldDefaultPrefix();//关键1
			PropertyValue[] pvArray = mpvs.getPropertyValues();
			for (PropertyValue pv : pvArray) {
				if (pv.getName().startsWith(fieldDefaultPrefix)) {//关键2
					String field = pv.getName().substring(fieldDefaultPrefix.length());
					if (getPropertyAccessor().isWritableProperty(field) && !mpvs.contains(field)) {
						mpvs.add(field, pv.getValue());
					}
					mpvs.removePropertyValue(pv);//关键3
				}
			}
		}
	}

这个方法,会找属性是下划线开头的并将他移除。我的属性名正好是“_id” 所以一直封装不进去。

转载于:https://my.oschina.net/u/1178126/blog/1787584

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值