Spring Framework

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

java.lang.Object
  extended by org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
      extended by 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
PathVariableMethodArgumentResolver()
           
 
Method Summary
protected  AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
          Create the AbstractNamedValueMethodArgumentResolver.NamedValueInfo object for the given method parameter.
protected  void handleMissingValue(java.lang.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(java.lang.Object arg, java.lang.String name, MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest request)
          Invoked after a value is resolved.
protected  java.lang.Object resolveName(java.lang.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 java.lang.Object resolveName(java.lang.String name,
                                       MethodParameter parameter,
                                       NativeWebRequest request)
                                throws java.lang.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:
java.lang.Exception - in case of errors

handleMissingValue

protected void handleMissingValue(java.lang.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(java.lang.Object arg,
                                   java.lang.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

Spring Framework