Class RequestParamMethodArgumentResolver
java.lang.Object
org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
org.springframework.web.method.annotation.RequestParamMethodArgumentResolver
- All Implemented Interfaces:
HandlerMethodArgumentResolver
,UriComponentsContributor
public class RequestParamMethodArgumentResolver
extends AbstractNamedValueMethodArgumentResolver
implements UriComponentsContributor
Resolves method arguments annotated with @
RequestParam
, arguments of
type MultipartFile
in conjunction with Spring's MultipartResolver
abstraction, and arguments of type jakarta.servlet.http.Part
in conjunction
with Servlet multipart requests. This resolver can also be created in default
resolution mode in which simple types (int, long, etc.) not annotated with
@RequestParam
are also treated as request parameters with
the parameter name derived from the argument name.
If the method parameter type is Map
, the name specified in the
annotation is used to resolve the request parameter String value. The value is
then converted to a Map
via type conversion assuming a suitable
Converter
or PropertyEditor
has been registered.
Or if a request parameter name is not specified the
RequestParamMapMethodArgumentResolver
is used instead to provide
access to all request parameters in the form of a map.
A WebDataBinder
is invoked to apply type conversion to resolved request
header values that don't yet match the method parameter type.
- Since:
- 3.1
- Author:
- Arjen Poutsma, Rossen Stoyanchev, Brian Clozel
- See Also:
-
Nested Class Summary
Nested classes/interfaces inherited from class org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
AbstractNamedValueMethodArgumentResolver.NamedValueInfo
-
Constructor Summary
ConstructorDescriptionRequestParamMethodArgumentResolver
(boolean useDefaultResolution) Create a newRequestParamMethodArgumentResolver
instance.RequestParamMethodArgumentResolver
(ConfigurableBeanFactory beanFactory, boolean useDefaultResolution) Create a newRequestParamMethodArgumentResolver
instance. -
Method Summary
Modifier and TypeMethodDescriptionvoid
contributeMethodArgument
(MethodParameter parameter, Object value, UriComponentsBuilder builder, Map<String, Object> uriVariables, ConversionService conversionService) Process the given method argument and either update theUriComponentsBuilder
or add to the map with URI variables to use to expand the URI after all arguments are processed.createNamedValueInfo
(MethodParameter parameter) Create theAbstractNamedValueMethodArgumentResolver.NamedValueInfo
object for the given method parameter.protected String
formatUriValue
(ConversionService cs, TypeDescriptor sourceType, Object value) protected void
handleMissingValue
(String name, MethodParameter parameter, NativeWebRequest request) Invoked when a named value is required, butAbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)
returnednull
and there is no default value.protected void
handleMissingValueAfterConversion
(String name, MethodParameter parameter, NativeWebRequest request) Invoked when a named value is present but becomesnull
after conversion.protected void
handleMissingValueInternal
(String name, MethodParameter parameter, NativeWebRequest request, boolean missingAfterConversion) protected Object
resolveName
(String name, MethodParameter parameter, NativeWebRequest request) Resolve the given parameter type and value name into an argument value.boolean
supportsParameter
(MethodParameter parameter) Supports the following: @RequestParam-annotated method arguments.Methods inherited from class org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
handleMissingValue, handleResolvedValue, resolveArgument
-
Constructor Details
-
RequestParamMethodArgumentResolver
public RequestParamMethodArgumentResolver(boolean useDefaultResolution) Create a newRequestParamMethodArgumentResolver
instance.- Parameters:
useDefaultResolution
- in default resolution mode a method argument that is a simple type, as defined inBeanUtils.isSimpleProperty(java.lang.Class<?>)
, is treated as a request parameter even if it isn't annotated, the request parameter name is derived from the method parameter name.
-
RequestParamMethodArgumentResolver
public RequestParamMethodArgumentResolver(@Nullable ConfigurableBeanFactory beanFactory, boolean useDefaultResolution) Create a newRequestParamMethodArgumentResolver
instance.- Parameters:
beanFactory
- a bean factory used for resolving ${...} placeholder and #{...} SpEL expressions in default values, ornull
if default values are not expected to contain expressionsuseDefaultResolution
- in default resolution mode a method argument that is a simple type, as defined inBeanUtils.isSimpleProperty(java.lang.Class<?>)
, is treated as a request parameter even if it isn't annotated, the request parameter name is derived from the method parameter name.
-
-
Method Details
-
supportsParameter
Supports the following:- @RequestParam-annotated method arguments.
This excludes
Map
params where the annotation does not specify a name. SeeRequestParamMapMethodArgumentResolver
instead for such params. - Arguments of type
MultipartFile
unless annotated with @RequestPart
. - Arguments of type
Part
unless annotated with @RequestPart
. - In default resolution mode, simple type arguments even if not with @
RequestParam
.
- Specified by:
supportsParameter
in interfaceHandlerMethodArgumentResolver
- Specified by:
supportsParameter
in interfaceUriComponentsContributor
- Parameters:
parameter
- the method parameter to check- Returns:
true
if this resolver supports the supplied parameter;false
otherwise
- @RequestParam-annotated method arguments.
This excludes
-
createNamedValueInfo
protected AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter) Description copied from class:AbstractNamedValueMethodArgumentResolver
Create theAbstractNamedValueMethodArgumentResolver.NamedValueInfo
object for the given method parameter. Implementations typically retrieve the method annotation by means ofMethodParameter.getParameterAnnotation(Class)
.- Specified by:
createNamedValueInfo
in classAbstractNamedValueMethodArgumentResolver
- Parameters:
parameter
- the method parameter- Returns:
- the named value information
-
resolveName
@Nullable protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest request) throws Exception Description copied from class:AbstractNamedValueMethodArgumentResolver
Resolve the given parameter type and value name into an argument value.- Specified by:
resolveName
in classAbstractNamedValueMethodArgumentResolver
- Parameters:
name
- the name of the value being resolvedparameter
- the method parameter to resolve to an argument value (pre-nested in case of aOptional
declaration)request
- the current request- Returns:
- the resolved argument (may be
null
) - Throws:
Exception
- in case of errors
-
handleMissingValue
protected void handleMissingValue(String name, MethodParameter parameter, NativeWebRequest request) throws Exception Description copied from class:AbstractNamedValueMethodArgumentResolver
Invoked when a named value is required, butAbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)
returnednull
and there is no default value. Subclasses typically throw an exception in this case.- Overrides:
handleMissingValue
in classAbstractNamedValueMethodArgumentResolver
- Parameters:
name
- the name for the valueparameter
- the method parameterrequest
- the current request- Throws:
Exception
-
handleMissingValueAfterConversion
protected void handleMissingValueAfterConversion(String name, MethodParameter parameter, NativeWebRequest request) throws Exception Description copied from class:AbstractNamedValueMethodArgumentResolver
Invoked when a named value is present but becomesnull
after conversion.- Overrides:
handleMissingValueAfterConversion
in classAbstractNamedValueMethodArgumentResolver
- Parameters:
name
- the name for the valueparameter
- the method parameterrequest
- the current request- Throws:
Exception
-
handleMissingValueInternal
protected void handleMissingValueInternal(String name, MethodParameter parameter, NativeWebRequest request, boolean missingAfterConversion) throws Exception - Throws:
Exception
-
contributeMethodArgument
public void contributeMethodArgument(MethodParameter parameter, @Nullable Object value, UriComponentsBuilder builder, Map<String, Object> uriVariables, ConversionService conversionService) Description copied from interface:UriComponentsContributor
Process the given method argument and either update theUriComponentsBuilder
or add to the map with URI variables to use to expand the URI after all arguments are processed.- Specified by:
contributeMethodArgument
in interfaceUriComponentsContributor
- Parameters:
parameter
- the controller method parameter (nevernull
)value
- the argument value (possiblynull
)builder
- the builder to update (nevernull
)uriVariables
- a map to add URI variables to (nevernull
)conversionService
- a ConversionService to format values as Strings
-
formatUriValue
@Nullable protected String formatUriValue(@Nullable ConversionService cs, @Nullable TypeDescriptor sourceType, @Nullable Object value)
-