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