今天看啥  ›  专栏  ›  襄垣

【Spring Boot】参数解析器 HandlerMethodArgumentResolver 🔥

襄垣  · 掘金  ·  · 2021-02-04 14:32
阅读 50

【Spring Boot】参数解析器 HandlerMethodArgumentResolver 🔥

参数解析器

参数解析器映射到Controller的某些类型参数时,做对应的处理。

public interface HandlerMethodArgumentResolver {
    //用于判定是否需要处理该参数分解,返回true为需要,并会去调用下面的方法resolveArgument。
    boolean supportsParameter(MethodParameter parameter);
    //真正用于处理参数分解的方法,返回的Object就是controller方法上的形参对象。
    Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,
            NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception;
}
复制代码

其他

举例

public class HandlerMethodArgumentResolverExtended implements HandlerMethodArgumentResolver {

    @Override
    public boolean supportsParameter(MethodParameter parameter) {
        Class<?> targetClass = parameter.getParameterType();
        if (targetClass.isAssignableFrom(PageRequest.class)
            || targetClass.isAssignableFrom(UserProfile.class)
            || targetClass.isAssignableFrom(MobileProfile.class)) {
            return true;
        }
        return false;
    }

    @Override
    public Object resolveArgument(
        MethodParameter parameter,
        ModelAndViewContainer mavContainer,
        NativeWebRequest webRequest,
        WebDataBinderFactory binderFactory) throws Exception {
        Class<?> targetClass = parameter.getParameterType();
        if (targetClass.isAssignableFrom(PageRequest.class)) {
            return PageHelper.buildPageRequest(webRequest);
        } else if (targetClass.isAssignableFrom(UserProfile.class)) {
            return UserHelper.buildUserProfile(webRequest);
        } else if (targetClass.isAssignableFrom(MobileProfile.class)) {
            return UserHelper.buildMobileProfile(webRequest);
        }
        return WebArgumentResolver.UNRESOLVED;
    }
}
复制代码

场景

  1. 将前端传入的不同的分页参数转换为符合框架规范的参数,比如Pageable
  2. 将某些通过转换获得的参数赋值给Controller中的参数;



原文地址:访问原文地址
快照地址: 访问文章快照