Class AbstractNamedValueMethodArgumentResolver
java.lang.Object
org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
- All Implemented Interfaces:
HandlerMethodArgumentResolver
- Direct Known Subclasses:
AbstractCookieValueMethodArgumentResolver
,ExpressionValueMethodArgumentResolver
,MatrixVariableMethodArgumentResolver
,PathVariableMethodArgumentResolver
,RequestAttributeMethodArgumentResolver
,RequestHeaderMethodArgumentResolver
,RequestParamMethodArgumentResolver
,SessionAttributeMethodArgumentResolver
public abstract class AbstractNamedValueMethodArgumentResolver
extends Object
implements HandlerMethodArgumentResolver
Abstract base class for resolving method arguments from a named value.
Request parameters, request headers, and path variables are examples of named
values. Each may have a name, a required flag, and a default value.
Subclasses define how to do the following:
- Obtain named value information for a method parameter
- Resolve names into argument values
- Handle missing argument values when argument values are required
- Optionally handle a resolved value
A default value string can contain ${...} placeholders and Spring Expression
Language #{...} expressions. For this to work a
ConfigurableBeanFactory
must be supplied to the class constructor.
A WebDataBinder
is created to apply type conversion to the resolved
argument value if it doesn't match the method parameter type.
- Since:
- 3.1
- Author:
- Arjen Poutsma, Rossen Stoyanchev, Juergen Hoeller, Sebastien Deleuze
-
Nested Class Summary
Modifier and TypeClassDescriptionprotected static class
Represents the information about a named value, including name, whether it's required and a default value. -
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionprotected abstract AbstractNamedValueMethodArgumentResolver.NamedValueInfo
createNamedValueInfo
(MethodParameter parameter) Create theAbstractNamedValueMethodArgumentResolver.NamedValueInfo
object for the given method parameter.protected void
handleMissingValue
(String name, MethodParameter parameter) Invoked when a named value is required, butresolveName(String, MethodParameter, NativeWebRequest)
returnednull
and there is no default value.protected void
handleMissingValue
(String name, MethodParameter parameter, NativeWebRequest request) Invoked when a named value is required, butresolveName(String, MethodParameter, NativeWebRequest)
returnednull
and there is no default value.protected void
handleMissingValueAfterConversion
(String name, MethodParameter parameter, NativeWebRequest request) Invoked when a named value is present but becomesnull
after conversion.protected void
handleResolvedValue
(Object arg, String name, MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest) Invoked after a value is resolved.final Object
resolveArgument
(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) Resolves a method parameter into an argument value from a given request.protected abstract Object
resolveName
(String name, MethodParameter parameter, NativeWebRequest request) Resolve the given parameter type and value name into an argument value.Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.springframework.web.method.support.HandlerMethodArgumentResolver
supportsParameter
-
Constructor Details
-
AbstractNamedValueMethodArgumentResolver
public AbstractNamedValueMethodArgumentResolver() -
AbstractNamedValueMethodArgumentResolver
Create a newAbstractNamedValueMethodArgumentResolver
instance.- Parameters:
beanFactory
- a bean factory to use for resolving ${...} placeholder and #{...} SpEL expressions in default values, ornull
if default values are not expected to contain expressions
-
-
Method Details
-
resolveArgument
@Nullable public final Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception Description copied from interface:HandlerMethodArgumentResolver
Resolves a method parameter into an argument value from a given request. AModelAndViewContainer
provides access to the model for the request. AWebDataBinderFactory
provides a way to create aWebDataBinder
instance when needed for data binding and type conversion purposes.- Specified by:
resolveArgument
in interfaceHandlerMethodArgumentResolver
- Parameters:
parameter
- the method parameter to resolve. This parameter must have previously been passed toHandlerMethodArgumentResolver.supportsParameter(org.springframework.core.MethodParameter)
which must have returnedtrue
.mavContainer
- the ModelAndViewContainer for the current requestwebRequest
- the current requestbinderFactory
- a factory for creatingWebDataBinder
instances- Returns:
- the resolved argument value, or
null
if not resolvable - Throws:
Exception
- in case of errors with the preparation of argument values
-
createNamedValueInfo
protected abstract AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter) Create theAbstractNamedValueMethodArgumentResolver.NamedValueInfo
object for the given method parameter. Implementations typically retrieve the method annotation by means ofMethodParameter.getParameterAnnotation(Class)
.- Parameters:
parameter
- the method parameter- Returns:
- the named value information
-
resolveName
@Nullable protected abstract Object resolveName(String name, MethodParameter parameter, NativeWebRequest request) throws Exception Resolve the given parameter type and value name into an argument value. -
handleMissingValue
protected void handleMissingValue(String name, MethodParameter parameter, NativeWebRequest request) throws Exception Invoked when a named value is required, butresolveName(String, MethodParameter, NativeWebRequest)
returnednull
and there is no default value. Subclasses typically throw an exception in this case.- Parameters:
name
- the name for the valueparameter
- the method parameterrequest
- the current request- Throws:
Exception
- Since:
- 4.3
-
handleMissingValue
Invoked when a named value is required, butresolveName(String, MethodParameter, NativeWebRequest)
returnednull
and there is no default value. Subclasses typically throw an exception in this case.- Parameters:
name
- the name for the valueparameter
- the method parameter- Throws:
ServletException
-
handleMissingValueAfterConversion
protected void handleMissingValueAfterConversion(String name, MethodParameter parameter, NativeWebRequest request) throws Exception Invoked when a named value is present but becomesnull
after conversion.- Parameters:
name
- the name for the valueparameter
- the method parameterrequest
- the current request- Throws:
Exception
- Since:
- 5.3.6
-
handleResolvedValue
protected void handleResolvedValue(@Nullable Object arg, String name, MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest) Invoked after a value is resolved.- Parameters:
arg
- the resolved argument valuename
- the argument nameparameter
- the argument parameter typemavContainer
- theModelAndViewContainer
(may benull
)webRequest
- the current request
-