public class PathVariableMethodArgumentResolver extends AbstractNamedValueMethodArgumentResolver implements UriComponentsContributor
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.
A WebDataBinder
is invoked to apply type conversion to resolved path variable
values that don't yet match the method parameter type.
AbstractNamedValueMethodArgumentResolver.NamedValueInfo
Constructor and Description |
---|
PathVariableMethodArgumentResolver() |
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 name,
MethodParameter parameter)
Invoked when a named value is required, but
AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)
returned null and there is no default value. |
protected void |
handleMissingValueAfterConversion(String name,
MethodParameter parameter,
NativeWebRequest request)
Invoked when a named value is present but becomes
null after conversion. |
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)
Resolve the given parameter type and value name into an argument value.
|
boolean |
supportsParameter(MethodParameter parameter)
Whether this contributor supports the given method parameter.
|
handleMissingValue, resolveArgument
public boolean supportsParameter(MethodParameter parameter)
UriComponentsContributor
supportsParameter
in interface HandlerMethodArgumentResolver
supportsParameter
in interface UriComponentsContributor
parameter
- the method parameter to checktrue
if this resolver supports the supplied parameter;
false
otherwiseprotected AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
AbstractNamedValueMethodArgumentResolver
AbstractNamedValueMethodArgumentResolver.NamedValueInfo
object for the given method parameter. Implementations typically
retrieve the method annotation by means of MethodParameter.getParameterAnnotation(Class)
.createNamedValueInfo
in class AbstractNamedValueMethodArgumentResolver
parameter
- the method parameter@Nullable protected Object resolveName(String name, MethodParameter parameter, NativeWebRequest request) throws Exception
AbstractNamedValueMethodArgumentResolver
resolveName
in class AbstractNamedValueMethodArgumentResolver
name
- the name of the value being resolvedparameter
- the method parameter to resolve to an argument value
(pre-nested in case of a Optional
declaration)request
- the current requestnull
)Exception
- in case of errorsprotected void handleMissingValue(String name, MethodParameter parameter) throws ServletRequestBindingException
AbstractNamedValueMethodArgumentResolver
AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest)
returned null
and there is no default value. Subclasses typically throw an exception in this case.handleMissingValue
in class AbstractNamedValueMethodArgumentResolver
name
- the name for the valueparameter
- the method parameterServletRequestBindingException
protected void handleMissingValueAfterConversion(String name, MethodParameter parameter, NativeWebRequest request) throws Exception
AbstractNamedValueMethodArgumentResolver
null
after conversion.handleMissingValueAfterConversion
in class AbstractNamedValueMethodArgumentResolver
name
- the name for the valueparameter
- the method parameterrequest
- the current requestException
protected void handleResolvedValue(@Nullable Object arg, String name, MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest request)
AbstractNamedValueMethodArgumentResolver
handleResolvedValue
in class AbstractNamedValueMethodArgumentResolver
arg
- the resolved argument valuename
- the argument nameparameter
- the argument parameter typemavContainer
- the ModelAndViewContainer
(may be null
)request
- the current requestpublic void contributeMethodArgument(MethodParameter parameter, Object value, UriComponentsBuilder builder, Map<String,Object> uriVariables, ConversionService conversionService)
UriComponentsContributor
UriComponentsBuilder
or add to the map with URI variables
to use to expand the URI after all arguments are processed.contributeMethodArgument
in interface UriComponentsContributor
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@Nullable protected String formatUriValue(@Nullable ConversionService cs, @Nullable TypeDescriptor sourceType, Object value)