public class RequestParamMethodArgumentResolver extends AbstractNamedValueMethodArgumentResolver implements UriComponentsContributor
RequestParam
, arguments of
type MultipartFile
in conjunction with Spring's MultipartResolver
abstraction, and arguments of type javax.servlet.http.Part
in conjunction
with Servlet 3.0 multipart requests. This resolver can also be created in default
resolution mode in which simple types (int, long, etc.) not annotated withRequestParamMapMethodArgumentResolver
Modifier and Type | Class and Description |
---|---|
private static class |
RequestParamMethodArgumentResolver.RequestParamNamedValueInfo |
private static class |
RequestParamMethodArgumentResolver.RequestPartResolver |
AbstractNamedValueMethodArgumentResolver.NamedValueInfo
Modifier and Type | Field and Description |
---|---|
private static TypeDescriptor |
STRING_TYPE_DESCRIPTOR |
private boolean |
useDefaultResolution |
Constructor and Description |
---|
RequestParamMethodArgumentResolver(boolean useDefaultResolution) |
RequestParamMethodArgumentResolver(ConfigurableBeanFactory beanFactory,
boolean useDefaultResolution) |
Modifier and Type | Method and Description |
---|---|
private void |
assertIsMultipartRequest(HttpServletRequest request) |
void |
contributeMethodArgument(MethodParameter parameter,
java.lang.Object value,
UriComponentsBuilder builder,
java.util.Map<java.lang.String,java.lang.Object> uriVariables,
ConversionService conversionService)
Process the given method argument and either update the
UriComponentsBuilder or add to the map with URI variables to use to
expand the URI after all arguments are processed. |
protected AbstractNamedValueMethodArgumentResolver.NamedValueInfo |
createNamedValueInfo(MethodParameter parameter)
Create the
AbstractNamedValueMethodArgumentResolver.NamedValueInfo object for the given method parameter. |
protected java.lang.String |
formatUriValue(ConversionService cs,
TypeDescriptor sourceType,
java.lang.Object value) |
private java.lang.Class<?> |
getCollectionParameterType(MethodParameter parameter) |
protected void |
handleMissingValue(java.lang.String name,
MethodParameter parameter)
Invoked when a named value is required, but
AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)
returned null and there is no default value. |
private boolean |
isMultipartFileArray(MethodParameter parameter) |
private boolean |
isMultipartFileCollection(MethodParameter parameter) |
private boolean |
isPartArray(MethodParameter parameter) |
private boolean |
isPartCollection(MethodParameter parameter) |
protected java.lang.Object |
resolveName(java.lang.String name,
MethodParameter parameter,
NativeWebRequest webRequest)
Resolves the given parameter type and value name into an argument value.
|
boolean |
supportsParameter(MethodParameter parameter)
Supports the following:
@RequestParam-annotated method arguments.
|
handleResolvedValue, resolveArgument
private static final TypeDescriptor STRING_TYPE_DESCRIPTOR
private final boolean useDefaultResolution
public RequestParamMethodArgumentResolver(boolean useDefaultResolution)
useDefaultResolution
- in default resolution mode a method argument
that is a simple type, as defined in BeanUtils.isSimpleProperty(java.lang.Class<?>)
,
is treated as a request parameter even if it it isn't annotated, the
request parameter name is derived from the method parameter name.public RequestParamMethodArgumentResolver(ConfigurableBeanFactory beanFactory, boolean useDefaultResolution)
beanFactory
- a bean factory used for resolving ${...} placeholder
and #{...} SpEL expressions in default values, or null
if default
values are not expected to contain expressionsuseDefaultResolution
- in default resolution mode a method argument
that is a simple type, as defined in BeanUtils.isSimpleProperty(java.lang.Class<?>)
,
is treated as a request parameter even if it it isn't annotated, the
request parameter name is derived from the method parameter name.public boolean supportsParameter(MethodParameter parameter)
Map
params where the annotation doesn't
specify a name. See RequestParamMapMethodArgumentResolver
instead for such params.
MultipartFile
unless annotated with @RequestPart
.
javax.servlet.http.Part
unless annotated with @RequestPart
.
RequestParam
.
supportsParameter
in interface HandlerMethodArgumentResolver
supportsParameter
in interface UriComponentsContributor
parameter
- the method parameter to checktrue
if this resolver supports the supplied parameter;
false
otherwiseprotected AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
AbstractNamedValueMethodArgumentResolver
AbstractNamedValueMethodArgumentResolver.NamedValueInfo
object for the given method parameter. Implementations typically
retrieve the method annotation by means of MethodParameter.getParameterAnnotation(Class)
.createNamedValueInfo
in class AbstractNamedValueMethodArgumentResolver
parameter
- the method parameterprotected java.lang.Object resolveName(java.lang.String name, MethodParameter parameter, NativeWebRequest webRequest) throws java.lang.Exception
AbstractNamedValueMethodArgumentResolver
resolveName
in class AbstractNamedValueMethodArgumentResolver
name
- the name of the value being resolvedparameter
- the method parameter to resolve to an argument valuewebRequest
- the current requestnull
java.lang.Exception
- in case of errorsprivate void assertIsMultipartRequest(HttpServletRequest request)
private boolean isMultipartFileCollection(MethodParameter parameter)
private boolean isMultipartFileArray(MethodParameter parameter)
private boolean isPartCollection(MethodParameter parameter)
private boolean isPartArray(MethodParameter parameter)
private java.lang.Class<?> getCollectionParameterType(MethodParameter parameter)
protected void handleMissingValue(java.lang.String name, MethodParameter parameter) throws ServletException
AbstractNamedValueMethodArgumentResolver
AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)
returned null
and there is no default value. Subclasses typically throw an exception in this case.handleMissingValue
in class AbstractNamedValueMethodArgumentResolver
name
- the name for the valueparameter
- the method parameterServletException
public void contributeMethodArgument(MethodParameter parameter, java.lang.Object value, UriComponentsBuilder builder, java.util.Map<java.lang.String,java.lang.Object> uriVariables, ConversionService conversionService)
UriComponentsContributor
UriComponentsBuilder
or add to the map with URI variables to use to
expand the URI after all arguments are processed.contributeMethodArgument
in interface UriComponentsContributor
parameter
- the controller method parameter, never null.value
- the argument value, possibly null.builder
- the builder to update, never null.uriVariables
- a map to add URI variables to, never null.conversionService
- a ConversionService to format values as Stringsprotected java.lang.String formatUriValue(ConversionService cs, TypeDescriptor sourceType, java.lang.Object value)