HandlerMethodArgumentResolver

描述

方法参数处理器,spring容器收到请求之后,对匹配的方法参数进行处理
通常用法:用户信息的统一获取及设置。

自定义方法参数处理器:

/**
 * @author zoum
 * @create 2019/10/29 11:16
 */
public class MyArgumentResolver implements HandlerMethodArgumentResolver{

    /**
     * 判断参数是否匹配
     * @param methodParameter
     * @return
     */
    @Override
    public boolean supportsParameter(MethodParameter methodParameter) {
        return methodParameter.getParameterType().isAssignableFrom(LoginUser.class);
    }

    /**
     * 返回匹配参数的处理结果
     * @param methodParameter
     * @param modelAndViewContainer
     * @param nativeWebRequest
     * @param webDataBinderFactory
     * @return
     * @throws Exception
     */
    @Nullable
    @Override
    public Object resolveArgument(MethodParameter methodParameter, @Nullable ModelAndViewContainer modelAndViewContainer, NativeWebRequest nativeWebRequest, @Nullable WebDataBinderFactory webDataBinderFactory) throws Exception {
        LoginUser loginUser = new LoginUser();
        loginUser.setUsername("zm");
        loginUser.setPassword("zm");
        return loginUser;
    }
}

自定义处理器配置

/**
 * @author zoum
 * @create 2019/10/29 11:13
 */
@Configuration
public class MvcConfig implements WebMvcConfigurer{

    @Override
    public void addArgumentResolvers(List<HandlerMethodArgumentResolver> resolvers) {
        MyArgumentResolver argumentResolver = new MyArgumentResolver();
        resolvers.add(argumentResolver);
    }
}

定义参数类型

/**
 * @author zoum
 * @create 2019/10/29 11:28
 */
@Data
public class LoginUser {

    private String username;
    private String password;

}

定义请求方法

@RestController
public class HealthController {

    /**
     * loginUser不需要前台显示传参,通常前端传值sessionId或者token信息,以此在MyArgumentResolver 处理器里面进行获取并设置,在请求方法里面就可以直接使用loginUser
     * @param loginUser
     * @return
     */
    @GetMapping("/health")
    public String health(LoginUser loginUser){
        return "ok=" + loginUser.getUsername();
    }
}

测试
请求发起:http://localhost:8080/health
请求结果:ok=zm

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容