Class PathVariableMethodArgumentResolver
- java.lang.Object
- org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
- org.springframework.web.servlet.mvc.method.annotation.PathVariableMethodArgumentResolver
- All Implemented Interfaces:
HandlerMethodArgumentResolver,UriComponentsContributor
public class PathVariableMethodArgumentResolver extends AbstractNamedValueMethodArgumentResolver implements UriComponentsContributor
Resolves method arguments annotated with an @PathVariable.An @
PathVariableis 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 classAbstractNamedValueMethodArgumentResolverfor 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 aMapvia type conversion, assuming a suitableConverterorPropertyEditorhas been registered.A
WebDataBinderis 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, Juergen Hoeller
Nested Class Summary
Nested classes/interfaces inherited from class org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
AbstractNamedValueMethodArgumentResolver.NamedValueInfo
Constructor Summary
Constructors Constructor Description PathVariableMethodArgumentResolver()
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidcontributeMethodArgument(MethodParameter parameter, Object value, UriComponentsBuilder builder, Map<String,Object> uriVariables, ConversionService conversionService)Process the given method argument and either update theUriComponentsBuilderor add to the map with URI variables to use to expand the URI after all arguments are processed.protected AbstractNamedValueMethodArgumentResolver.NamedValueInfocreateNamedValueInfo(MethodParameter parameter)Create theAbstractNamedValueMethodArgumentResolver.NamedValueInfoobject for the given method parameter.protected StringformatUriValue(ConversionService cs, TypeDescriptor sourceType, Object value)protected voidhandleMissingValue(String name, MethodParameter parameter)Invoked when a named value is required, butAbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)returnednulland there is no default value.protected voidhandleResolvedValue(Object arg, String name, MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest request)Invoked after a value is resolved.protected ObjectresolveName(String name, MethodParameter parameter, NativeWebRequest request)Resolve the given parameter type and value name into an argument value.booleansupportsParameter(MethodParameter parameter)Whether this contributor supports the given method parameter.Methods inherited from class org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
handleMissingValue, resolveArgument
Constructor Detail
PathVariableMethodArgumentResolver
public PathVariableMethodArgumentResolver()
Method Detail
supportsParameter
public boolean supportsParameter(MethodParameter parameter)
Description copied from interface:UriComponentsContributorWhether this contributor supports the given method parameter.- Specified by:
supportsParameterin interfaceHandlerMethodArgumentResolver- Specified by:
supportsParameterin interfaceUriComponentsContributor- Parameters:
parameter- the method parameter to check- Returns:
trueif this resolver supports the supplied parameter;falseotherwise
createNamedValueInfo
protected AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
Description copied from class:AbstractNamedValueMethodArgumentResolverCreate theAbstractNamedValueMethodArgumentResolver.NamedValueInfoobject for the given method parameter. Implementations typically retrieve the method annotation by means ofMethodParameter.getParameterAnnotation(Class).- Specified by:
createNamedValueInfoin classAbstractNamedValueMethodArgumentResolver- 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:AbstractNamedValueMethodArgumentResolverResolve the given parameter type and value name into an argument value.- Specified by:
resolveNamein classAbstractNamedValueMethodArgumentResolver- Parameters:
name- the name of the value being resolvedparameter- the method parameter to resolve to an argument value (pre-nested in case of aOptionaldeclaration)request- the current request- Returns:
- the resolved argument (may be
null) - Throws:
Exception- in case of errors
handleMissingValue
protected void handleMissingValue(String name, MethodParameter parameter) throws ServletRequestBindingException
Description copied from class:AbstractNamedValueMethodArgumentResolverInvoked when a named value is required, butAbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)returnednulland there is no default value. Subclasses typically throw an exception in this case.- Overrides:
handleMissingValuein classAbstractNamedValueMethodArgumentResolver- Parameters:
name- the name for the valueparameter- the method parameter- Throws:
ServletRequestBindingException
handleResolvedValue
protected void handleResolvedValue(Object arg, String name, MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest request)
Description copied from class:AbstractNamedValueMethodArgumentResolverInvoked after a value is resolved.- Overrides:
handleResolvedValuein classAbstractNamedValueMethodArgumentResolver- Parameters:
arg- the resolved argument valuename- the argument nameparameter- the argument parameter typemavContainer- theModelAndViewContainer(may benull)request- the current request
contributeMethodArgument
public void contributeMethodArgument(MethodParameter parameter, Object value, UriComponentsBuilder builder, Map<String,Object> uriVariables, ConversionService conversionService)
Description copied from interface:UriComponentsContributorProcess the given method argument and either update theUriComponentsBuilderor add to the map with URI variables to use to expand the URI after all arguments are processed.- Specified by:
contributeMethodArgumentin interfaceUriComponentsContributor- Parameters:
parameter- the controller method parameter (nevernull)value- the argument value (possiblynull)builder- the builder to update (nevernull)uriVariables- a map to add URI variables to (nevernull)conversionService- a ConversionService to format values as Strings
formatUriValue
protected String formatUriValue(ConversionService cs, TypeDescriptor sourceType, Object value)