1、HandlerMethodArgumentResolver简介

HandlerMethodArgumentResolver 是SpringMVC中的一个接口,它允许开发者在SpringMVC中支持自定义参数解析,它可以支持更多的参数类型,比如:HttpServletRequest、HttpServletResponse、HttpSession、Model等,也可以支持自定义的参数类型,比如:自定义的对象类型。

2、HandlerMethodArgumentResolver的作用

HandlerMethodArgumentResolver的作用是帮助SpringMVC在处理请求的时候,把请求参数解析成Controller方法参数,从而实现Controller方法参数的自动注入。

HandlerMethodArgumentResolver的作用主要是实现Controller方法参数的注入,SpringMVC中的参数解析机制是通过HandlerMethodArgumentResolver的实现类来实现的,它可以支持更多的参数类型,比如:HttpServletRequest、HttpServletResponse、HttpSession、Model等,也可以支持自定义的参数类型,比如:自定义的对象类型。

3、HandlerMethodArgumentResolver的使用

使用HandlerMethodArgumentResolver需要实现HandlerMethodArgumentResolver接口,并实现其中的两个方法:supportsParameter() 和resolveArgument()。

public class MyHandlerMethodArgumentResolver implements HandlerMethodArgumentResolver {

       @Override

       public boolean supportsParameter(MethodParameter methodParameter) {

              // 判断参数类型是否是自定义的类型

              return methodParameter.getParameterType().isAssignableFrom(MyObject.class);

       }

       @Override

       public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, WebDataBinderFactory webDataBinderFactory) throws Exception {

              // 从请求中获取参数,并封装成自定义的对象

              MyObject myObject = new MyObject();

              String myParam = nativeWebRequest.getParameter("myParam");

              myObject.setMyParam(myParam);

              return myObject;

       }

}

实现完HandlerMethodArgumentResolver接口之后,还需要在SpringMVC的配置类中进行注册,以便SpringMVC可以使用它来解析请求参数:

@Configuration

public class WebMvcConfig implements WebMvcConfigurer {

       @Override

       public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers) {

              // 注册自定义的HandlerMethodArgumentResolver

              argumentResolvers.add(new MyHandlerMethodArgumentResolver());

       }

}

这样,当SpringMVC处理请求的时候,就会使用自定义的HandlerMethodArgumentResolver来解析请求参数,从而实现Controller方法参数的自动注入。