@ -1,5 +1,5 @@
@@ -1,5 +1,5 @@
/ *
* Copyright 2002 - 2016 the original author or authors .
* Copyright 2002 - 2019 the original author or authors .
*
* Licensed under the Apache License , Version 2 . 0 ( the "License" ) ;
* you may not use this file except in compliance with the License .
@ -30,7 +30,8 @@ import org.springframework.web.bind.support.WebDataBinderFactory;
@@ -30,7 +30,8 @@ import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest ;
/ * *
* Resolves method parameters by delegating to a list of registered { @link HandlerMethodArgumentResolver } s .
* Resolves method parameters by delegating to a list of registered
* { @link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers } .
* Previously resolved method parameters are cached for faster lookups .
*
* @author Rossen Stoyanchev
@ -39,6 +40,7 @@ import org.springframework.web.context.request.NativeWebRequest;
@@ -39,6 +40,7 @@ import org.springframework.web.context.request.NativeWebRequest;
* /
public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgumentResolver {
@Deprecated
protected final Log logger = LogFactory . getLog ( getClass ( ) ) ;
private final List < HandlerMethodArgumentResolver > argumentResolvers =
@ -57,26 +59,22 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu
@@ -57,26 +59,22 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu
}
/ * *
* Add the given { @link HandlerMethodArgumentResolver } s .
* Add the given { @link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers } .
* @since 4 . 3
* /
public HandlerMethodArgumentResolverComposite addResolvers ( HandlerMethodArgumentResolver . . . resolvers ) {
if ( resolvers ! = null ) {
for ( HandlerMethodArgumentResolver resolver : resolvers ) {
this . argumentResolvers . add ( resolver ) ;
}
Collections . addAll ( this . argumentResolvers , resolvers ) ;
}
return this ;
}
/ * *
* Add the given { @link HandlerMethodArgumentResolver } s .
* Add the given { @link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers } .
* /
public HandlerMethodArgumentResolverComposite addResolvers ( List < ? extends HandlerMethodArgumentResolver > resolvers ) {
if ( resolvers ! = null ) {
for ( HandlerMethodArgumentResolver resolver : resolvers ) {
this . argumentResolvers . add ( resolver ) ;
}
this . argumentResolvers . addAll ( resolvers ) ;
}
return this ;
}
@ -98,17 +96,20 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu
@@ -98,17 +96,20 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu
/ * *
* Whether the given { @linkplain MethodParameter method parameter } is supported by any registered
* { @link HandlerMethodArgumentResolver } .
* Whether the given { @linkplain MethodParameter method parameter } is
* supported by any registered { @link HandlerMethodArgumentResolver } .
* /
@Override
public boolean supportsParameter ( MethodParameter parameter ) {
return ( getArgumentResolver ( parameter ) ! = null ) ;
return getArgumentResolver ( parameter ) ! = null ;
}
/ * *
* Iterate over registered { @link HandlerMethodArgumentResolver } s and invoke the one that supports it .
* @throws IllegalStateException if no suitable { @link HandlerMethodArgumentResolver } is found .
* Iterate over registered
* { @link HandlerMethodArgumentResolver HandlerMethodArgumentResolvers } and
* invoke the one that supports it .
* @throws IllegalStateException if no suitable
* { @link HandlerMethodArgumentResolver } is found .
* /
@Override
public Object resolveArgument ( MethodParameter parameter , ModelAndViewContainer mavContainer ,
@ -116,22 +117,20 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu
@@ -116,22 +117,20 @@ public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgu
HandlerMethodArgumentResolver resolver = getArgumentResolver ( parameter ) ;
if ( resolver = = null ) {
throw new IllegalArgumentException ( "Unknown parameter type [" + parameter . getParameterType ( ) . getName ( ) + "]" ) ;
throw new IllegalArgumentException ( "Unsupported parameter type [" +
parameter . getParameterType ( ) . getName ( ) + "]. supportsParameter should be called first." ) ;
}
return resolver . resolveArgument ( parameter , mavContainer , webRequest , binderFactory ) ;
}
/ * *
* Find a registered { @link HandlerMethodArgumentResolver } that supports the given method parameter .
* Find a registered { @link HandlerMethodArgumentResolver } that supports
* the given method parameter .
* /
private HandlerMethodArgumentResolver getArgumentResolver ( MethodParameter parameter ) {
HandlerMethodArgumentResolver result = this . argumentResolverCache . get ( parameter ) ;
if ( result = = null ) {
for ( HandlerMethodArgumentResolver methodArgumentResolver : this . argumentResolvers ) {
if ( logger . isTraceEnabled ( ) ) {
logger . trace ( "Testing if argument resolver [" + methodArgumentResolver + "] supports [" +
parameter . getGenericParameterType ( ) + "]" ) ;
}
if ( methodArgumentResolver . supportsParameter ( parameter ) ) {
result = methodArgumentResolver ;
this . argumentResolverCache . put ( parameter , result ) ;