中国最全IT社区平台 联系我们 | 收藏本站
阿里云优惠2阿里云优惠1
您当前位置:首页 > php开源 > php教程 > springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)

springMVC源码分析--RequestParamMethodArgumentResolver参数解析器(三)

来源:程序员人生   发布时间:2017-04-14 16:45:43 阅读次数:700次

之前两篇博客springMVC源码分析--HandlerMethodArgumentResolver参数解析器(1)和 springMVC源码解析--HandlerMethodArgumentResolverComposite参数解析器集合(2)我们对参数解析器有1些了解了,接下来这篇博客我们选取1个HandlerMethodArgumentResolver的具体实现类RequestParamMethodArgumentResolver来简单介绍1下具体的参数解析进程。RequestParamMethodArgumentResolver简单来讲就是对1个要求参数值的解析,将要求中的参数值解析成为Controller函数中参数需要的具体数据类型。

Controller中函数需要的参数

    @RequestMapping("/getdata")
    @ResponseBody
    public Object getData(String name,Integer age){
    	return name+""+age;
    }
我们发起的要求链接

http://localhost/product/getdata.action?name=admin&age=10

接下来我们跟踪1下代码看看springMVC是如何将要求中的参数name=admin和age=10解析成为函数中需要的具体数据类型String和Integer。

首先参数解析会到AbstractNamedValueMethodArgumentResolver类的resolveArgument函数,以下图



首先会获得request中的参数name及值,接下来是在RequestParamMethodArgumentResolver类的resolveName函数中获得这个参数的值

protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest webRequest) throws Exception {
	......	
	if (arg == null) {
		String[] paramValues = webRequest.getParameterValues(name);
		if (paramValues != null) {
			arg = (paramValues.length == 1 ? paramValues[0] : paramValues);
		}
	}
	
	return arg;
}
上面代码的履行以下图:

生活不易,码农辛苦
如果您觉得本网站对您的学习有所帮助,可以手机扫描二维码进行捐赠
程序员人生
------分隔线----------------------------
分享到:
------分隔线----------------------------