Buggy code:
public class HandlerMethodInvoker { private static final Log logger = LogFactory . getLog ( HandlerMethodInvoker . class ) ; private final HandlerMethodResolver methodResolver ; private final WebBindingInitializer bindingInitializer ; private final SessionAttributeStore sessionAttributeStore ; private final ParameterNameDiscoverer parameterNameDiscoverer ; private final WebArgumentResolver [ ] customArgumentResolvers ; private final HttpMessageConverter [ ] messageConverters ; private final SimpleSessionStatus sessionStatus = new SimpleSessionStatus ( ) ; public HandlerMethodInvoker ( HandlerMethodResolver methodResolver ) { } public HandlerMethodInvoker ( HandlerMethodResolver methodResolver , WebBindingInitializer bindingInitializer ) { } public HandlerMethodInvoker ( HandlerMethodResolver methodResolver , WebBindingInitializer bindingInitializer , SessionAttributeStore sessionAttributeStore , ParameterNameDiscoverer parameterNameDiscoverer , WebArgumentResolver [ ] customArgumentResolvers , HttpMessageConverter [ ] messageConverters ) { } public final Object invokeHandlerMethod ( Method handlerMethod , Object handler , NativeWebRequest webRequest , ExtendedModelMap implicitModel ) throws Exception { } @ SuppressWarnings ( "unchecked" ) private Object [ ] resolveHandlerArguments ( Method handlerMethod , Object handler , NativeWebRequest webRequest , ExtendedModelMap implicitModel ) throws Exception { } protected void initBinder ( Object handler , String attrName , WebDataBinder binder , NativeWebRequest webRequest ) throws Exception { } private Object [ ] resolveInitBinderArguments ( Object handler , Method initBinderMethod , WebDataBinder binder , NativeWebRequest webRequest ) throws Exception { } @ SuppressWarnings ( "unchecked" ) private Object resolveRequestParam ( String paramName , boolean required , String defaultValue , MethodParameter methodParam , NativeWebRequest webRequest , Object handlerForInitBinderCall ) throws Exception { Class < ? > paramType = methodParam . getParameterType ( ) ; <START_BUG> if ( Map . class . isAssignableFrom ( paramType ) ) { <END_BUG> return resolveRequestParamMap ( ( ( Class < ? extends Map > ) ( paramType ) ) , webRequest ) ; } if ( ( paramName . length ( ) ) == 0 ) { paramName = getRequiredParameterName ( methodParam ) ; } Object paramValue = null ; if ( ( webRequest . getNativeRequest ( ) ) instanceof MultipartRequest ) { paramValue = ( ( MultipartRequest ) ( webRequest . getNativeRequest ( ) ) ) . getFile ( paramName ) ; } if ( paramValue == null ) { String [ ] paramValues = webRequest . getParameterValues ( paramName ) ; if ( ( paramValues != null ) && ( ! ( paramType . isArray ( ) ) ) ) { paramValue = ( ( paramValues . length ) == 1 ) ? paramValues [ 0 ] : paramValues ; } else { paramValue = paramValues ; } } if ( paramValue == null ) { if ( defaultValue != null ) { paramValue = resolveDefaultValue ( defaultValue ) ; } else if ( required ) { raiseMissingParameterException ( paramName , paramType ) ; } paramValue = checkValue ( paramName , paramValue , paramType ) ; } WebDataBinder binder = createBinder ( webRequest , null , paramName ) ; initBinder ( handlerForInitBinderCall , paramName , binder , webRequest ) ; return binder . convertIfNecessary ( paramValue , paramType , methodParam ) ; } private Map resolveRequestParamMap ( Class < ? extends Map > mapType , NativeWebRequest webRequest ) { } @ SuppressWarnings ( "unchecked" ) private Object resolveRequestHeader ( String headerName , boolean required , String defaultValue , MethodParameter methodParam , NativeWebRequest webRequest , Object handlerForInitBinderCall ) throws Exception { } private Map resolveRequestHeaderMap ( Class < ? extends Map > mapType , NativeWebRequest webRequest ) { } protected Object resolveRequestBody ( MethodParameter methodParam , NativeWebRequest webRequest , Object handler ) throws Exception { } @ SuppressWarnings ( "unchecked" ) private HttpEntity resolveHttpEntityRequest ( MethodParameter methodParam , NativeWebRequest webRequest , Object handler ) throws Exception { } private Object readWithMessageConverters ( MethodParameter methodParam , HttpInputMessage inputMessage , Class paramType ) throws Exception { } private Class < ? > getHttpEntityType ( MethodParameter methodParam ) { } private Object resolveCookieValue ( String cookieName , boolean required , String defaultValue , MethodParameter methodParam , NativeWebRequest webRequest , Object handlerForInitBinderCall ) throws Exception { } protected Object resolveCookieValue ( String cookieName , Class paramType , NativeWebRequest webRequest ) throws Exception { } private Object resolvePathVariable ( String pathVarName , MethodParameter methodParam , NativeWebRequest webRequest , Object handlerForInitBinderCall ) throws Exception { } protected String resolvePathVariable ( String pathVarName , Class paramType , NativeWebRequest webRequest ) throws Exception { } private String getRequiredParameterName ( MethodParameter methodParam ) { } private Object checkValue ( String name , Object value , Class paramType ) { } private WebDataBinder resolveModelAttribute ( String attrName , MethodParameter methodParam , ExtendedModelMap implicitModel , NativeWebRequest webRequest , Object handler ) throws Exception { } @ SuppressWarnings ( "unchecked" ) public final void updateModelAttributes ( Object handler , Map < String , Object > mavModel , ExtendedModelMap implicitModel , NativeWebRequest webRequest ) throws Exception { } protected boolean isBindingCandidate ( Object value ) { } private Object doInvokeMethod ( Method method , Object target , Object [ ] args ) throws Exception { } protected void raiseMissingParameterException ( String paramName , Class paramType ) throws Exception { } protected void raiseMissingHeaderException ( String headerName , Class paramType ) throws Exception { } protected void raiseMissingCookieException ( String cookieName , Class paramType ) throws Exception { } protected void raiseSessionRequiredException ( String message ) throws Exception { } protected WebDataBinder createBinder ( NativeWebRequest webRequest , Object target , String objectName ) throws Exception { } private void doBind ( WebDataBinder binder , NativeWebRequest webRequest , boolean validate , boolean failOnErrors ) throws Exception { } protected void doBind ( WebDataBinder binder , NativeWebRequest webRequest ) throws Exception { } protected HttpInputMessage createHttpInputMessage ( NativeWebRequest webRequest ) throws Exception { } protected String parseDefaultValueAttribute ( String value ) { } protected Object resolveDefaultValue ( String value ) { } protected Object resolveCommonArgument ( MethodParameter methodParameter , NativeWebRequest webRequest ) throws Exception { } protected Object resolveStandardArgument ( Class parameterType , NativeWebRequest webRequest ) throws Exception { } protected final void addReturnValueAsModelAttribute ( Method handlerMethod , Class handlerType , Object returnValue , ExtendedModelMap implicitModel ) { } }

Fix:
if ( ( Map . class . isAssignableFrom ( paramType ) ) && ( ( paramName . length ( ) ) == 0 ) ) {