## 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

    public class RequestParamMethodArgumentResolver

extends AbstractNamedValueMethodArgumentResolver

Resolves method arguments annotated with @`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 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 request parameter name 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. If a request parameter name is not specified with a `Map` method parameter type, the `RequestParamMapMethodArgumentResolver` is used instead providing 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
See Also:
  `RequestParamMapMethodArgumentResolver`

Nested Class Summary

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

Constructor Summary
`RequestParamMethodArgumentResolver(ConfigurableBeanFactory beanFactory, boolean useDefaultResolution)`

Method Summary
`protected AbstractNamedValueMethodArgumentResolver.NamedValueInfo` `createNamedValueInfo(MethodParameter parameter)` Create the `AbstractNamedValueMethodArgumentResolver.NamedValueInfo` object for the given method parameter.
`protected void` `handleMissingValue(String paramName, MethodParameter parameter)` Invoked when a named value is required, but `AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)` returned `null` and there is no default value.
`protected Object` `resolveName(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.

Methods inherited from class org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
`handleResolvedValue, resolveArgument`

Methods inherited from class java.lang.Object
`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

Constructor Detail

### RequestParamMethodArgumentResolver

    public RequestParamMethodArgumentResolver(ConfigurableBeanFactory beanFactory,
                                              boolean useDefaultResolution)

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

Method Detail

### supportsParameter

    public boolean supportsParameter(MethodParameter parameter)

  Supports the following:
  - @RequestParam-annotated method arguments. This excludes `Map` params where the annotation doesn't specify a name. See `RequestParamMapMethodArgumentResolver` instead for such params.
  - Arguments of type `MultipartFile` unless annotated with @`RequestPart`.
  - Arguments of type `javax.servlet.http.Part` unless annotated with @`RequestPart`.
  - In default resolution mode, simple type arguments even if not with @`RequestParam`.

  Parameters:
    `parameter` - the method parameter to check
  Returns:
    `true` if this resolver supports the supplied parameter; `false` otherwise

### createNamedValueInfo

    protected AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(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

    protected Object resolveName(String name,
                                 MethodParameter parameter,
                                 NativeWebRequest webRequest)
                          throws Exception

  Description copied from class: `AbstractNamedValueMethodArgumentResolver`
  Resolves 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
    `webRequest` - the current request
  Returns:
    the resolved argument. May be `null`
  Throws:
    `Exception` - in case of errors

### handleMissingValue

    protected void handleMissingValue(String paramName,
                                      MethodParameter parameter)
                               throws ServletException

  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.

  Specified by:
    `handleMissingValue` in class `AbstractNamedValueMethodArgumentResolver`
  Parameters:
    `paramName` - the name for the value
    `parameter` - the method parameter
  Throws:
    `ServletException`