Package org.springframework.web.method.annotation

# 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:
  - `RequestParamMapMethodArgumentResolver`

## Nested Class Summary

## Nested classes/interfaces inherited from class org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver

`AbstractNamedValueMethodArgumentResolver.NamedValueInfo`

## Constructor Summary

Constructors
Constructor
Description
`RequestParamMethodArgumentResolver(boolean useDefaultResolution)`
Create a new `RequestParamMethodArgumentResolver` instance.
`RequestParamMethodArgumentResolver(org.springframework.beans.factory.config.ConfigurableBeanFactory beanFactory, boolean useDefaultResolution)`
Create a new `RequestParamMethodArgumentResolver` instance.

## Method Summary

Modifier and Type
Method
Description
`void`
`contributeMethodArgument(org.springframework.core.MethodParameter parameter, Object value, UriComponentsBuilder builder, Map<String,Object> uriVariables, org.springframework.core.convert.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(org.springframework.core.MethodParameter parameter)`
Create the `AbstractNamedValueMethodArgumentResolver.NamedValueInfo` object for the given method parameter.
`protected String`
`formatUriValue(org.springframework.core.convert.ConversionService cs, org.springframework.core.convert.TypeDescriptor sourceType, Object value)`
`protected void`
`handleMissingValue(String name, org.springframework.core.MethodParameter parameter, NativeWebRequest request)`
Invoked when a named value is required, but `AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)` returned `null` and there is no default value.
`protected void`
`handleMissingValueAfterConversion(String name, org.springframework.core.MethodParameter parameter, NativeWebRequest request)`
Invoked when a named value is present but becomes `null` after conversion.
`protected void`
`handleMissingValueInternal(String name, org.springframework.core.MethodParameter parameter, NativeWebRequest request, boolean missingAfterConversion)`
`protected Object`
`resolveName(String name, org.springframework.core.MethodParameter parameter, NativeWebRequest request)`
Resolve the given parameter type and value name into an argument value.
`boolean`
`supportsParameter(org.springframework.core.MethodParameter parameter)`
Supports the following: @RequestParam-annotated method arguments.

### Methods inherited from class org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver

`handleMissingValue, handleResolvedValue, resolveArgument`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Constructor Details

### RequestParamMethodArgumentResolver

public RequestParamMethodArgumentResolver(boolean useDefaultResolution)
Create a new `RequestParamMethodArgumentResolver` instance.

Parameters:
  `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 isn't annotated, the request parameter name is derived from the method parameter name.

### RequestParamMethodArgumentResolver

public RequestParamMethodArgumentResolver(@Nullable org.springframework.beans.factory.config.ConfigurableBeanFactory beanFactory, boolean useDefaultResolution)
Create a new `RequestParamMethodArgumentResolver` instance.

Parameters:
  `beanFactory` - a bean factory used for resolving ${...} placeholder and #{...} SpEL expressions in default values, or `null` if default values are not expected to contain expressions
  `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 isn't annotated, the request parameter name is derived from the method parameter name.

## Method Details

### supportsParameter

public boolean supportsParameter(org.springframework.core.MethodParameter parameter)
Supports the following:

- @RequestParam-annotated method arguments. This excludes `Map` params where the annotation does not specify a name. See `RequestParamMapMethodArgumentResolver` 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 interface `HandlerMethodArgumentResolver`
Specified by:
  `supportsParameter` in interface `UriComponentsContributor`
Parameters:
  `parameter` - the method parameter to check
Returns:
  `true` if this resolver supports the supplied parameter; `false` otherwise

### createNamedValueInfo

protected AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(org.springframework.core.MethodParameter parameter)
Description copied from class: `AbstractNamedValueMethodArgumentResolver`
Create the `AbstractNamedValueMethodArgumentResolver.NamedValueInfo` object for the given method parameter. Implementations typically retrieve the method annotation by means of `MethodParameter.getParameterAnnotation(Class)`.

Specified by:
  `createNamedValueInfo` in class `AbstractNamedValueMethodArgumentResolver`
Parameters:
  `parameter` - the method parameter
Returns:
  the named value information

### resolveName

@Nullable protected Object resolveName(String name, org.springframework.core.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 class `AbstractNamedValueMethodArgumentResolver`
Parameters:
  `name` - the name of the value being resolved
  `parameter` - the method parameter to resolve to an argument value (pre-nested in case of a `Optional` declaration)
  `request` - the current request
Returns:
  the resolved argument (may be `null`)
Throws:
  `Exception` - in case of errors

### handleMissingValue

protected void handleMissingValue(String name, org.springframework.core.MethodParameter parameter, NativeWebRequest request) throws Exception
Description copied from class: `AbstractNamedValueMethodArgumentResolver`
Invoked when a named value is required, but `AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)` returned `null` and there is no default value. Subclasses typically throw an exception in this case.

Overrides:
  `handleMissingValue` in class `AbstractNamedValueMethodArgumentResolver`
Parameters:
  `name` - the name for the value
  `parameter` - the method parameter
  `request` - the current request
Throws:
  `Exception`

### handleMissingValueAfterConversion

protected void handleMissingValueAfterConversion(String name, org.springframework.core.MethodParameter parameter, NativeWebRequest request) throws Exception
Description copied from class: `AbstractNamedValueMethodArgumentResolver`
Invoked when a named value is present but becomes `null` after conversion.

Overrides:
  `handleMissingValueAfterConversion` in class `AbstractNamedValueMethodArgumentResolver`
Parameters:
  `name` - the name for the value
  `parameter` - the method parameter
  `request` - the current request
Throws:
  `Exception`

### handleMissingValueInternal

protected void handleMissingValueInternal(String name, org.springframework.core.MethodParameter parameter, NativeWebRequest request, boolean missingAfterConversion) throws Exception

Throws:
  `Exception`

### contributeMethodArgument

public void contributeMethodArgument(org.springframework.core.MethodParameter parameter, @Nullable Object value, UriComponentsBuilder builder, Map<String,Object> uriVariables, org.springframework.core.convert.ConversionService conversionService)
Description copied from interface: `UriComponentsContributor`
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.

Specified by:
  `contributeMethodArgument` in interface `UriComponentsContributor`
Parameters:
  `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 Strings

### formatUriValue

@Nullable protected String formatUriValue(@Nullable org.springframework.core.convert.ConversionService cs, @Nullable org.springframework.core.convert.TypeDescriptor sourceType, @Nullable Object value)