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