org.springframework.web.method.annotation
Class AbstractNamedValueMethodArgumentResolver

java.lang.Object
  extended by org.springframework.web.method.annotation.AbstractNamedValueMethodArgumentResolver
All Implemented Interfaces:
HandlerMethodArgumentResolver
Direct Known Subclasses:
AbstractCookieValueMethodArgumentResolver, ExpressionValueMethodArgumentResolver, PathVariableMethodArgumentResolver, RequestHeaderMethodArgumentResolver, RequestParamMethodArgumentResolver

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:

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

Nested Class Summary
protected static class AbstractNamedValueMethodArgumentResolver.NamedValueInfo
          Represents the information about a named value, including name, whether it's required and a default value.
 
Constructor Summary
AbstractNamedValueMethodArgumentResolver(ConfigurableBeanFactory beanFactory)
           
 
Method Summary
protected abstract  AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
          Create the AbstractNamedValueMethodArgumentResolver.NamedValueInfo object for the given method parameter.
protected abstract  void handleMissingValue(String name, MethodParameter parameter)
          Invoked when a named value is required, but resolveName(String, MethodParameter, NativeWebRequest) returned null and there is no default value.
protected  void handleResolvedValue(Object arg, String name, MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest)
          Invoked after a value is resolved.
 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)
          Resolves 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 Detail

AbstractNamedValueMethodArgumentResolver

public AbstractNamedValueMethodArgumentResolver(ConfigurableBeanFactory beanFactory)
Parameters:
beanFactory - a bean factory to use for resolving ${...} placeholder and #{...} SpEL expressions in default values, or null if default values are not expected to contain expressions
Method Detail

resolveArgument

public final Object resolveArgument(MethodParameter parameter,
                                    ModelAndViewContainer mavContainer,
                                    NativeWebRequest webRequest,
                                    WebDataBinderFactory binderFactory)
                             throws Exception
Description copied from interface: HandlerMethodArgumentResolver
Resolves a method parameter into an argument value from a given request. A ModelAndViewContainer provides access to the model for the request. A WebDataBinderFactory provides a way to create a WebDataBinder instance when needed for data binding and type conversion purposes.

Specified by:
resolveArgument in interface HandlerMethodArgumentResolver
Parameters:
parameter - the method parameter to resolve. This parameter must have previously been passed to HandlerMethodArgumentResolver.supportsParameter(org.springframework.core.MethodParameter) and it must have returned true
mavContainer - the ModelAndViewContainer for the current request
webRequest - the current request
binderFactory - a factory for creating WebDataBinder instances
Returns:
the resolved argument value, or null.
Throws:
Exception - in case of errors with the preparation of argument values

createNamedValueInfo

protected abstract AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
Create the AbstractNamedValueMethodArgumentResolver.NamedValueInfo object for the given method parameter. Implementations typically retrieve the method annotation by means of MethodParameter.getParameterAnnotation(Class).

Parameters:
parameter - the method parameter
Returns:
the named value information

resolveName

protected abstract Object resolveName(String name,
                                      MethodParameter parameter,
                                      NativeWebRequest request)
                               throws Exception
Resolves the given parameter type and value name into an argument value.

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 abstract void handleMissingValue(String name,
                                           MethodParameter parameter)
                                    throws ServletException
Invoked when a named value is required, but resolveName(String, MethodParameter, NativeWebRequest) returned null and there is no default value. Subclasses typically throw an exception in this case.

Parameters:
name - the name for the value
parameter - the method parameter
Throws:
ServletException

handleResolvedValue

protected void handleResolvedValue(Object arg,
                                   String name,
                                   MethodParameter parameter,
                                   ModelAndViewContainer mavContainer,
                                   NativeWebRequest webRequest)
Invoked after a value is resolved.

Parameters:
arg - the resolved argument value
name - the argument name
parameter - the argument parameter type
mavContainer - the ModelAndViewContainer, which may be null
webRequest - the current request