org.springframework.web.method.annotation.support
Class RequestParamMethodArgumentResolver

java.lang.Object
  extended by org.springframework.web.method.annotation.support.AbstractNamedValueMethodArgumentResolver
      extended by org.springframework.web.method.annotation.support.RequestParamMethodArgumentResolver
All Implemented Interfaces:
HandlerMethodArgumentResolver

public class RequestParamMethodArgumentResolver
extends AbstractNamedValueMethodArgumentResolver

Resolves method arguments annotated with @RequestParam, arguments of type MultipartFile in conjunction with Spring's MultipartResolver abstraction, and arguments of type javax.servlet.http.Part in conjunction with Servlet 3.0 multipart requests. This resolver can also be created in default resolution mode in which simple types (int, long, etc.) not annotated with @RequestParam are also treated as request parameters with the parameter name derived from the argument name.

If the method parameter type is Map, the request parameter name is used to resolve the request parameter String value. The value is then converted to a Map via type conversion assuming a suitable Converter or PropertyEditor has been registered. If a request parameter name is not specified with a Map method parameter type, the RequestParamMapMethodArgumentResolver is used instead providing access to all request parameters in the form of a map.

A WebDataBinder is invoked to apply type conversion to resolved request header values that don't yet match the method parameter type.

Since:
3.1
Author:
Arjen Poutsma, Rossen Stoyanchev
See Also:
RequestParamMapMethodArgumentResolver

Nested Class Summary
 
Nested classes/interfaces inherited from class org.springframework.web.method.annotation.support.AbstractNamedValueMethodArgumentResolver
AbstractNamedValueMethodArgumentResolver.NamedValueInfo
 
Constructor Summary
RequestParamMethodArgumentResolver(ConfigurableBeanFactory beanFactory, boolean useDefaultResolution)
           
 
Method Summary
protected  AbstractNamedValueMethodArgumentResolver.NamedValueInfo createNamedValueInfo(MethodParameter parameter)
          Create the AbstractNamedValueMethodArgumentResolver.NamedValueInfo object for the given method parameter.
protected  void handleMissingValue(String paramName, MethodParameter parameter)
          Invoked when a named value is required, but AbstractNamedValueMethodArgumentResolver.resolveName(String, MethodParameter, NativeWebRequest) returned null and there is no default value.
protected  Object resolveName(String name, MethodParameter parameter, NativeWebRequest webRequest)
          Resolves the given parameter type and value name into an argument value.
 boolean supportsParameter(MethodParameter parameter)
          Supports the following: @RequestParam-annotated method arguments.
 
Methods inherited from class org.springframework.web.method.annotation.support.AbstractNamedValueMethodArgumentResolver
handleResolvedValue, resolveArgument
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

RequestParamMethodArgumentResolver

public RequestParamMethodArgumentResolver(ConfigurableBeanFactory beanFactory,
                                          boolean useDefaultResolution)
Parameters:
beanFactory - a bean factory used for resolving ${...} placeholder and #{...} SpEL expressions in default values, or null if default values are not expected to contain expressions
useDefaultResolution - in default resolution mode a method argument that is a simple type, as defined in BeanUtils.isSimpleProperty(java.lang.Class), is treated as a request parameter even if it itsn't annotated, the request parameter name is derived from the method parameter name.
Method Detail

supportsParameter

public boolean supportsParameter(MethodParameter parameter)
Supports the following:

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 Object resolveName(String name,
                             MethodParameter parameter,
                             NativeWebRequest webRequest)
                      throws 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
webRequest - the current request
Returns:
the resolved argument. May be null
Throws:
Exception - in case of errors

handleMissingValue

protected void handleMissingValue(String paramName,
                                  MethodParameter parameter)
                           throws ServletException
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:
paramName - the name for the value
parameter - the method parameter
Throws:
ServletException