org.springframework.web.servlet.mvc.method.annotation

## Class PathVariableMethodArgumentResolver

- java.lang.Object
- - org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
  - - org.springframework.web.servlet.mvc.method.annotation.PathVariableMethodArgumentResolver

- All Implemented Interfaces:
    HandlerMethodArgumentResolver

      public class PathVariableMethodArgumentResolver
      extends AbstractNamedValueMethodArgumentResolver

  Resolves method arguments annotated with an @`PathVariable`.

  An @`PathVariable` is a named value that gets resolved from a URI template variable. It is always required and does not have a default value to fall back on. See the base class `AbstractNamedValueMethodArgumentResolver` for more information on how named values are processed.

  If the method parameter type is `Map`, the name specified in the annotation is used to resolve the URI variable String value. The value is then converted to a `Map` via type conversion assuming a suitable `Converter` or `PropertyEditor` has been registered. Or if the annotation does not specify name the `RequestParamMapMethodArgumentResolver` is used instead to provide access to all URI variables in a map.

  A `WebDataBinder` is invoked to apply type conversion to resolved path variable values that don't yet match the method parameter type.

  Since:
    3.1
  Author:
    Rossen Stoyanchev, Arjen Poutsma

- - ### Nested Class Summary

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

      `AbstractNamedValueMethodArgumentResolver.NamedValueInfo`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `PathVariableMethodArgumentResolver()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected AbstractNamedValueMethodArgumentResolver.NamedValueInfo` | `createNamedValueInfo(MethodParameter parameter)` Create the `AbstractNamedValueMethodArgumentResolver.NamedValueInfo` object for the given method parameter.
    `protected void` | `handleMissingValue(String name, MethodParameter param)` Invoked when a named value is required, but `AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)` returned `null` and there is no default value.
    `protected void` | `handleResolvedValue(Object arg, String name, MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest request)` Invoked after a value is resolved.
    `protected Object` | `resolveName(String name, MethodParameter parameter, NativeWebRequest request)` Resolves the given parameter type and value name into an argument value.
    `boolean` | `supportsParameter(MethodParameter parameter)` Whether the given method parameter is supported by this resolver.

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

      `resolveArgument`

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

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

- - ### Constructor Detail

    - #### PathVariableMethodArgumentResolver

          public PathVariableMethodArgumentResolver()

  - ### Method Detail

    - #### supportsParameter

          public boolean supportsParameter(MethodParameter parameter)

      Description copied from interface: `HandlerMethodArgumentResolver`
      Whether the given method parameter is supported by this resolver.
      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 request)
                                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
        `request` - the current request
      Returns:
        the resolved argument. May be `null`
      Throws:
        `Exception` - in case of errors

    - #### handleMissingValue

          protected void handleMissingValue(String name,
                                MethodParameter param)
                                     throws ServletRequestBindingException

      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:
        `name` - the name for the value
        `param` - the method parameter
      Throws:
        `ServletRequestBindingException`

    - #### handleResolvedValue

          protected void handleResolvedValue(Object arg,
                                 String name,
                                 MethodParameter parameter,
                                 ModelAndViewContainer mavContainer,
                                 NativeWebRequest request)

      Description copied from class: `AbstractNamedValueMethodArgumentResolver`
      Invoked after a value is resolved.
      Overrides:
        `handleResolvedValue` in class `AbstractNamedValueMethodArgumentResolver`
      Parameters:
        `arg` - the resolved argument value
        `name` - the argument name
        `parameter` - the argument parameter type
        `mavContainer` - the `ModelAndViewContainer`, which may be `null`
        `request` - the current request