程序员人生 网站导航

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

栏目:php教程时间:2017-04-14 16:45:43

之前两篇博客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;
}
上面代码的履行以下图:

------分隔线----------------------------
------分隔线----------------------------

最新技术推荐