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