Spring Boot 2.2.6 源码之旅三十八SpringMVC源码细节之深入模型方法三

Spring Boot 2.2.6 源码之旅三十八SpringMVC源码细节之深入模型方法三

数据转换convertIfNecessary

一路调用内部最后到这里:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后抛异常了:
在这里插入图片描述
这里明显会转换错误,我故意的,如果是数字的话肯定是没问题的。
这下次我改改:
在这里插入图片描述
有了:
在这里插入图片描述

请求参数不存在的情况createAttribute

前面分析的都是请求参数存在了,如果不存在呢,其实就是用构造方法创建一个对象。

	protected Object createAttribute(String attributeName, MethodParameter parameter,
			WebDataBinderFactory binderFactory, NativeWebRequest webRequest) throws Exception {

		MethodParameter nestedParameter = parameter.nestedIfOptional();
		Class<?> clazz = nestedParameter.getNestedParameterType();

		Constructor<?> ctor = BeanUtils.findPrimaryConstructor(clazz);
		if (ctor == null) {
			Constructor<?>[] ctors = clazz.getConstructors();
			if (ctors.length == 1) {
				ctor = ctors[0];
			}
			else {
				try {
					ctor = clazz.getDeclaredConstructor();
				}
				catch (NoSuchMethodException ex) {
					throw new IllegalStateException("No primary or default constructor found for " + clazz, ex);
				}
			}
		}

		Object attribute = constructAttribute(ctor, attributeName, parameter, binderFactory, webRequest);
		if (parameter != nestedParameter) {
			attribute = Optional.of(attribute);
		}
		return attribute;
	}

我们尝试让请求参数不存在,这次没有name1了:
在这里插入图片描述
但是有异常了,因为我们需要int类型,这个基本类型,没有默认构造方法,那我们改成Integer看看:
在这里插入图片描述
改成Integer
在这里插入图片描述
也一样:
在这里插入图片描述
因为他们都要找默认构造函数,是不存在的。所以要么有这个请求参数,要么改成其他类型,比如String比较好。比如我改成Dog吧,至少有默认构造函数,可以实例化出来。
在这里插入图片描述
在这里插入图片描述

好了,参数值获取和创建先说到这里,如果请求参数中没有对应参数的话,就会创建一个对象,等待后面的数据绑定,下篇说数据绑定。

好了,今天就到这里了,希望对学习理解有帮助,大神看见勿喷,仅为自己的学习理解,能力有限,请多包涵。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值