HandlerMethodArgumentResolver
是Spring MVC
的一种策略接口。用于从指定的请求上下文中,解析出控制器方法某个参数MethodParameter
对应的参数值。
HandlerMethodArgumentResolver
接口约定了两个方法 :
boolean supportsParameter(MethodParameter parameter)
是否支持parameter
指定的方法参数。Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest,WebDataBinderFactory binderFactory)
从指定请求上下文中,将方法参数MethodParameter
解析为参数值。这里需要解析的参数parameter
一定符合如下条件:将其交给当前HandlerMethodArgumentResolver
对象的方法supportsParameter
,返回结果是true
。
基于该接口,
Spring MVC
提供了很多内置实现用于将请求上下文中的各种信息映射到控制器方法参数值。关于这些HandlerMethodArgumentResolver
实现类的更多信息,可以参考"Spring MVC : 框架缺省的控制器方法参数解析器"。
package org.springframework.web.method.support;
/**
* Strategy interface for resolving method parameters into argument values in
* the context of a given request.
*
*/
public interface HandlerMethodArgumentResolver {
/**
* Whether the given MethodParameter method parameter is
* supported by this resolver.
* @param parameter the method parameter to check
* @return true if this resolver supports the supplied parameter;
* false otherwise
*/
boolean supportsParameter(MethodParameter parameter);
/**
* 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.
* @param parameter the method parameter to resolve. This parameter must
* have previously been passed to #supportsParameter which must
* have returned true.
* @param mavContainer the ModelAndViewContainer for the current request
* @param webRequest the current request
* @param binderFactory a factory for creating WebDataBinder instances
* @return the resolved argument value, or null if not resolvable
* @throws Exception in case of errors with the preparation of argument values
*/
@Nullable
Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory)
throws Exception;
}