用于在给定请求的上下文中将方法参数解析为参数值的策略接口。

该接口允许开发者自定义如何从HTTP请求中提取参数并将其绑定到控制器方法参数上。

Spring MVC中已经提供了相应的 HandlerMethodArgumentResolver 实现,来处理 @RequestParam@RequestHeader@PathVariable@RequestBody 等注解参数。

可以实现 HandlerMethodArgumentResolver 接口,来自定义自己的控制器参数绑定逻辑.

一、源码

1
2
3
4
5
6
7
8
9
public interface HandlerMethodArgumentResolver {

boolean supportsParameter(MethodParameter parameter);

@Nullable
Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer,
NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception;

}

supportsParameter 方法,用来判断该解析器是否支持给定的方法参数,支持返回 true,不支持返回 false

resolveArgument 方法,用来解析来自请求的参数值赋值给方法参数,其几个参数如下:

  • MethodParameter parameter,用来解析的方法参数。这个参数之前必须传递给过 supportsParameter 方法,且 supportsParameter 方法返回true
  • ModelAndViewContainer mavContainer,当前请求的 ModelAndViewContainer
  • NativeWebRequest webRequest,当前请求
  • WebDataBinderFactory binderFactory,创建 WebDataBinder 的示例

二、实现类一览

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
MapMethodProcessor (org.springframework.web.method.annotation)
PathVariableMapMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
AbstractNamedValueMethodArgumentResolver (org.springframework.web.method.annotation)
RequestHeaderMethodArgumentResolver (org.springframework.web.method.annotation)
RequestAttributeMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
RequestParamMethodArgumentResolver (org.springframework.web.method.annotation)
AbstractCookieValueMethodArgumentResolver (org.springframework.web.method.annotation)
SessionAttributeMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
MatrixVariableMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
ExpressionValueMethodArgumentResolver (org.springframework.web.method.annotation)
PathVariableMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
RequestHeaderMapMethodArgumentResolver (org.springframework.web.method.annotation)
ModelAttributeMethodProcessor (org.springframework.web.method.annotation)
ServletModelAttributeMethodProcessor (org.springframework.web.servlet.mvc.method.annotation)
SessionStatusMethodArgumentResolver (org.springframework.web.method.annotation)
RequestParamMapMethodArgumentResolver (org.springframework.web.method.annotation)
PrincipalMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
UriComponentsBuilderMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
CurrentSecurityContextArgumentResolver (org.springframework.security.web.method.annotation)
HandlerMethodArgumentResolverComposite (org.springframework.web.method.support)
RedirectAttributesMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
MatrixVariableMapMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
CsrfTokenArgumentResolver (org.springframework.security.web.method.annotation)
ErrorsMethodArgumentResolver (org.springframework.web.method.annotation)
AuthenticationPrincipalArgumentResolver (org.springframework.security.web.bind.support)
ServletResponseMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
ModelMethodProcessor (org.springframework.web.method.annotation)
ContinuationHandlerMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
AbstractMessageConverterMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
RequestPartMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)
AbstractMessageConverterMethodProcessor (org.springframework.web.servlet.mvc.method.annotation)
AuthenticationPrincipalArgumentResolver (org.springframework.security.web.method.annotation)
AbstractWebArgumentResolverAdapter (org.springframework.web.method.annotation)
ServletWebArgumentResolverAdapter (org.springframework.web.servlet.mvc.method.annotation)
ServletRequestMethodArgumentResolver (org.springframework.web.servlet.mvc.method.annotation)

相关链接

[[RequestParamMapMethodArgumentResolver]]

[[RequestParamMethodArgumentResolver]]

OB tags

#Spring #SpringMVC