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 `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 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 and Description
    `RequestParamMethodArgumentResolver(boolean useDefaultResolution)`
    `RequestParamMethodArgumentResolver(ConfigurableBeanFactory beanFactory, boolean useDefaultResolution)`

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `contributeMethodArgument(MethodParameter parameter, Object value, UriComponentsBuilder builder, Map<String,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 String` | `formatUriValue(ConversionService cs, TypeDescriptor sourceType, Object value)`
    `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(boolean useDefaultResolution)

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

    - #### 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 it isn'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`.
      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(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`

    - #### contributeMethodArgument

          public void contributeMethodArgument(MethodParameter parameter,
                                               Object value,
                                               UriComponentsBuilder builder,
                                               Map<String,Object> uriVariables,
                                               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

          protected String formatUriValue(ConversionService cs,
                                          TypeDescriptor sourceType,
                                          Object value)